Hippo2000 (2000/7/28)
LWP::UserAgentモジュールなのです。
作者はGisle Aasさんです。メールで許可をいただきました。
2001/6/21:山宮隆さんからの指摘を受けて、余分な「;」を削除しました。
LWP::UserAgent - WWW ユーザ・エージェント クラス
require LWP::UserAgent; $ua = LWP::UserAgent->new;
$request = HTTP::Request->new('GET', 'file://localhost/etc/motd');
$response = $ua->request($request); # or $response = $ua->request($request, '/tmp/sss'); # or $response = $ua->request($request, \&callback, 4096);
sub callback { my($data, $response, $protocol) = @_; .... }
LWP::UserAgentは単純なWorld-Wide Web ユーザ・エージェントをPerlで実装するクラスです。それはHTTP::Request、HTTP::Response、そしてlibwww-perl ライブラリの残りの中核を形成するLWP::Protocolクラスをまとめます。単純化のため、このクラスを直接、WWWリクエストを実行するために使うことが出来ます。代りにアプリケーション独自の動きのためにサブクラス化することもできます。
通常の使用では、アプリケーションはUserAgentクラスを作成し、タイムアウト、プロキシー、名前などのための値でそれを設定します。次に実行されるために必要があるリクエストのためにHTTP::Requestのインスタンスを作成します。そしてこのリクエストはUserAgent request()メソッドに渡されます。これは対応するプロトコルを使ってそれを発行し、HTTP::Responseオブジェクトを返します。
このライブラリの基本的なアプローチはHTTP式通信をすべてのプロトコルスキームに使うことです。つまりgopherやftpリクエストでもHTTP::Responseオブジェクトを受け取るということです。HTTP式通信により似せるため、gopherメニューとfileのディレクトリはHTMLドキュメントに変換されます。
request()メソッドはレスポンスの内容をメモリ、ファイルへの格納、サブルーチン呼び出しの繰り返しの3つのうちの1つの方法で処理することが出来ます。request()への2番目の引数として渡された値の種類によってどれか1つを選びます。
メモリ上の場合は内容をresponseオブジェクトのスカラ'content'属性に格納することで、さらに解析する必要があるかもしれない小さなHTML応答に適しています。この変数は2番目の引数がなければ(あるいはundefであれば)使われます。
ファイル名の場合はファイル名が入っているスカラをrequest()の2番目の引数として必要とします。そして大量のメモリを必要せず、直接ファイルに書かれる必要がある大きなWWWオブジェクトに向いています。この場合request()から返されるresponseオブジェクトは空のcontent属性を持っています。もしrequestが失敗すれば、contentは空ではないかもしれません、そしてファイルは触られないでしょう。
サブルーチンの場合には、request()への2番目の引数としてコールバック・ルーチンへのリファレンスを必要とします。そして3番目の引数としてオプションのチャンクサイズを取ることも出来ます。この変数は"パイプラインの"処理を構築するために使われます。それは受取られたチャンクの処理をすべてのデータ届く前に始められます。コールバック関数は3つの引数で呼ばれます:このときに受信されたデータ、responseオブジェクトへのリファレンス、protocolオブジェクトへのリファレンスです。request()から返されるresponseオブジェクトは空のcontentを持ちます。requestが失敗すると、コールバック・ルーチンが呼ばれ、response->contentは空でないかもしれません。
requestはコールバック・ルーチンでdie()を呼ぶことによって中断させることが出来ます。dieメッセージは"X-Died"という特別なヘッダ・フィールドとして利用することが出来ます。
またこのライブラリはサブルーチン・リファレンスをrequestオブジェクトでのcontentとして使うことも許しています。このサブルーチンは呼ばれたときに内容(content)を返さなければなりません(おそらく細切れの)。もう内容がなければ、空の文字列を返さなければなりません。
以下のメソッドを使うことが出来ます:
$argはスカラであれば、レスポンスが格納されるファイル名として取られます。
$argがサブルーチンへのリファレンスであれば、内容のチャンクが受信されるとこのルーチンが呼ばれます。オプションの$size引数は適切なチャンク・サイズのためのヒントとして取られます。
$argが省略されると、内容はresponseオブジェクト自身に格納されます。
引数はsimple_request()のものと同じです。
デフォルトの実装ではPOSTリクエストではFALSEを、それ以外にはTRUEを返します。
リストにあるユーザ名とパスワードを返さなければなりません。認証解決の試みを中断させるためにはundefを返してください。
この実装は単に既に格納されているメンバー変数のセットをチェックします。サブクラスはこのモジュールを上書きできます。例えばユーザにユーザ名/パスワードを尋ねるなど。この例はこのライブラリと一緒に配布されるlwp-requestプログラムにあります。
user agent文字列は1つもしくはそれ以上の、オプションで"/"文字で区切られたバージョン番号がついた単純な製品識別子です。例を以下に示します:
$ua->agent('Checkbot/0.4 ' . $ua->agent);
$ua->agent('Mozilla/5.0');
$ua->from('gaas@cpan.org');
$ua->proxy(['http', 'ftp'], 'http://proxy.sn.no:8001/');
$ua->proxy('gopher', 'http://proxy.sn.no:8001/');
最初の形式はそのURLがメソッドの最初に引数のリストに入っているアクセス・メソッド、つまり'http'と'ftp'のプロキシーのために使われることを指定します。
2番目の形式は1つのアクセス機能のためのプロキシーURLを指定するための短縮した形式を示しています。
gopher_proxy=http://proxy.my.place/ wais_proxy=http://proxy.my.place/ no_proxy="localhost,my.domain" export gopher_proxy wais_proxy no_proxy
Cshまたはtcshユーザは、これらの環境変数を定義するためにsetenvコマンドを使わなければなりません。
$ua->no_proxy('localhost', 'no', ...);
libwww-perl5の一通りの概要は LWP をご覧下さい。使い方の例についてはlwp-request と lwp-mirror をご覧下さい。
Copyright 1995-2000 Gisle Aas.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。