HTTP::Headers

Hippo2000 (2000/7/28)

HTTP::Headersモジュールなのです。

作者はGisle Aasさんです。メールで許可をいただきました。


目次


名前

HTTP::Headers - HTTPメッセージヘッダをカプセル化するクラス


概要

 require HTTP::Headers;
 $h = new HTTP::Headers;

説明

HTTP::HeadersクラスはHTTP形式メッセージヘッダをカプセル化します。ヘッダは属性-値の組み合わせで構成され、それは繰り返しがあるかも知れず、特定の順序で出力されます。

このクラスのインスタンスは通常、HTTP::RequestやHTTP::Responseクラスのメンバー変数として、ライブラリ内部用に作成されます。

以下のメソッドが利用できます:

$h = new HTTP::Headers
新しいHTTP::Headersオブジェクトを組み立てます。コンストラクタのパラメータを通して初期の属性-値の組を渡すことが出来ます。例えば:
 $h = new HTTP::Headers
     Date         => 'Thu, 03 Feb 1994 00:00:00 GMT',
     Content_Type => 'text/html; version=3.2',
     Content_Base => 'http://www.sn.no/';
$h->header($field [=> $value],...)
ヘッダの値を取得あるいは設定します。ヘッダ・フィールド名は大文字/小文字を区別しません。=>演算子の前にクォートしたくないPerlユーザに簡単なように、ヘッダ名での'-'として'_'を使うことが出来ます。(この動きは$HTTP::Headers::TRANSLATE_UNDERSCOREをFALSEにすることにより抑止することができます)

header()メソッドは複数の($field => $values)の組を受取ります、そこで1回の呼び出しでたくさんのフィールドを更新することが出来ます。

オプションの$values引数はスカラまたはスカラのリストへのリファレンスにすることができます。$value引数が未定義だったり指定されなければヘッダは変更されません。

最後の$field値の古い値が返されます。複数の値を持つフィールドは、スカラ・コンテキストでは","を区切り文字としてつなげられます。

 $header->header(MIME_Version => '1.0',
                 User_Agent   => 'My-Web-Client/0.01');
 $header->header(Accept => "text/html, text/plain, image/*");
 $header->header(Accept => [qw(text/html text/plain image/*)]);
 @accepts = $header->header('Accept');
$h->scan(\&doit)
各ヘッダそれぞれにサブルーチンを適用します。コールバック・ルーチンは2つパラメータで呼び出されます:フィールド名と1つの値。ヘッダが1つ以上の値を持っていれば、ルーチンはそれぞれの値につき1回呼ばれます。コールバック・ルーチンに渡されるフィールド名はHTTP仕様で提案されている大文字/小文字をもち、推奨されている"Good Practice"の順でやってきます。
$h->as_string([$endl])
フォーマットされたMIMEヘッダとしてヘッダ・フィールドを返します。文字列を組み立てるために内部でscan()メソッドを使っているので、結果はHTTP仕様で提案されている大文字小文字で、ヘッダ・フィールドの順序の推奨されている"Good Practice"に従います。長いヘッダの値はたたまれません。

オプションのパラメータは使用する行末シーケンスを指定します。デフォルトは"\n"です。ヘッダに埋め込まれた"\n"文字は、この行末シーケンスで置きかえられます。

$h->push_header($field, $val)
指定されたヘッダに新しいフィールドの値を追加します。ヘッダ・フィールド名は大文字小文字を区別しません。フィールドはすでに値を持っている必要はありません。同じフィールドのための前の値は残ります。引数にはスカラやスカラのリストへのリファレンスを指定することが出来ます。
 $header->push_header(Accept => 'image/jpeg');
$h->remove_header($field,...)
この関数は指定された名前を持つヘッダを削除します。
$h->clone
HTTP::Headersオブジェクトのコピーを返します。

便宜メソッド

よく利用されるヘッダは以下の便宜メソッドを通してもアクセスすることが出来ます。これらのメソッドはヘッダの値を読むこと設定することの両方に使うことできます。メソッドに引数を渡せばヘッダの値が設定されます。ヘッダの古い値は常に返されます。

日付/時刻を扱うメソッドは常にその値をシステム時刻(1970年1月1日からの秒数)に変換し、ヘッダの値が設定されたとき、値がそうした種類であることを期待します。

$h->date
このヘッダはメッセージが発行された日付と時刻を表します。例えば:
  $h->date(time);  # 現在の時刻を設定します
$h->expires
このヘッダは、それ以降はそのエントリが新鮮でない(stale)であると考えられる日付と時刻を示します。
$h->if_modified_since
 
$h->if_unmodified_since
このエhッダはリクエストを条件付にします。もしリクエストされたリソースがこのフィールドで指定された時刻から変更された(されていない)、サーバはドキュメント自身の代りに"304 Not Modified"レスポンスを返します。
$h->last_modified
このヘッダはそのリソースが最後に変更された日付と時刻を返します。 例えば.:
  # check if document is more than 1 hour old
  if ($h->last_modified < time - 60*60) {
        ...
  }
$h->content_type
Content-Typeヘッダ・フィールドはメッセージ内容のメディア・タイプを示します。:
  $h->content_type('text/html');

返される値は小文字に変換され、潜在的なパラメータが切り落とされ、配列コンテキストであれば、分けられた値として返されます。これは以下のようにすることを安全にします:

  if ($h->content_type eq 'text/html') {
     # もしヘッダの本当の値が'TEXT/HTML; version=3.0'であっても
     # ここに入ります
     ...
  }
$h->content_encoding
Content-Encoding ヘッダ・フィールドはメディア・タイプの修飾子として使われます。もしあれば、その値はどんな追加のエンコーディング機能がそのリソースに適用されたのかを示します。
$h->content_length
メッセージ・コンテントの大きさをバイト数で示す10進数。
$h->content_language
メッセージ内容の対象としている聞き手の自然言語。この値はRFC1766で定義されている1つまたは複数の言語タグです。例えば "no"はノルウェー語、"en-US"はUS-英語です。
$h->title
ドキュメントのタイトル。libwww-perlでは、このヘッダは自動的にHTMLドキュメントの<TITLE>...</TITLE>要素から初期化されます。このヘッダはもはやHTTP標準の一部ではありません。
$h->user_agent
このヘッダはリクエスト・メッセージで使われ、そのリクエストを発行したユーザ・エージェントについての情報が入っています。例:
  $h->user_agent('Mozilla/1.2');
$h->server
serverヘッダ・フィールドには、そのリクエストを取り扱うサーバ・プログラムによって使われたソフトウェアについての情報が入っています。
$h->from
このヘッダにはリクエストしているユーザ・エージェントを制御している人のためのインターネットe-mailアドレスが入っていなければなりません。そのアドレスは、RFC822によって定義されているように、機械で使えなければなりません。例:
  $h->from('Gisle Aas <aas@sn.no>');
$h->referer
そこからリクエストされたリソースアドレスが取得された、ドキュメントのアドレス(URI)を指定するために使われます。
$h->www_authenticate
このヘッダは"401 Unauthorized"レスポンスの一部として入らなければなりません。そのフィールドの値は認証機能とそのリクエストされたURIへの適用できるパラメータを示すチャレンジにより構成されます。
$h->proxy_authenticate
このヘッダは"407 Proxy Authentication Required"レスポンスに入らなければなりません。
$h->authorization
 
$h->proxy_authorization
サーバまたはプロキシーでそれ自身を認証して欲しいユーザ・エージェント。これらのヘッダを入れることによりそうなるかもしれません。
$h->authorization_basic
このヘッダは"基本認証機能"を使う認証ヘッダを取得/設定するために使われます。配列コンテキストでは2つの値を返します;ユーザ名とパスワードです。スカラ・コンテキストでは1つの文字列といて"uname:password"返します。

ヘッダの値を設定するために使われるときは、2つの引数が期待されます。例..:

  $h->authorization_basic($uname, $password);

もし$unameにコロン':'が入っていればcroakします。

$h->proxy_authorization_basic
authorization_basic()と同じ。しかし代りに"Proxy-Authorization"ヘッダを設定します。

著作権(COPYRIGHT)

(原文のまま)

Copyright 1995-1998 Gisle Aas.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.


ホーム Perlの小技 HTTP

ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。