今さらながらLWP::UserAgentのメモ。
コンストラクタ
$ua = new LWP::UserAgent;
$ua->agent($product_id)
リクエストのUser-Agentヘッダの値を $product_id に変更する。$product_id が空白文字で終わっている場合は、その値にデフォルト値が追加される。デフォルト値は libwww-perl/5.805 (5.805 はバージョン番号)。
$ua->agent; # libwww-perl/5.805 を返す。 $ua->agent("Mozilla/5.0 "); # Mozilla/5.0 libwww-perl/5.805 に変更。 $ua->agent("Mozilla/5.0"); # Mozilla/5.0 に変更。
$ua->protocols_allowed(\@protocols)
使用できるプロトコルを制限する。デフォルトでは ftp や file も許可されている。
$ua->protocols_allowed(['http','https']); # httpとhttpsのみ許可。
$ua->parse_head($boolean)
取得したHTMLのheadセクションを解析するか否かを変更する。デフォルトはTRUE。
解析したheadセクション中の要素は、レスポンスヘッダに追加されるので、titleやlinkを取得するときには便利。ヘッダを加工されたくない場合はFALSEを設定すればよい。
$ua->parse_head(0); # headセクションを解析しない。
$ua->requests_redirectable(\@requests)
LWP::UserAgentはレスポンスのステータスコードが3XXの場合、リダイレクトを繰り返してコンテンツを取得しようと試みるが、その際にリダイレクトを許可するメソッドを設定する、デフォルトは GET と HEAD。
$ua->requests_redirectable([]); # リダイレクトを許可しない。
$ua->credentials($netloc, $realm, $uname, $pass)
認証のためのユーザ名($uname)、パスワード($pass)を設定する。ユーザ名、パスワードは、$netlocで指定したホストから$realmで指定したレルムが返された場合のみ送信する*1。
$ua->credentials("www.example.com:80", "Some Realm", "foo", "secret");
デフォルトで提供されている認証方式は、BasicとDigest。LWP::Authen::Wsseをインストールすれば、WSSEによる認証も使えるようになる*2。
$ua->request($request)
$requestで指定したリクエストを送信する。$requestはHTTP::Requestのインスタンス、返り値はHTTP::Responseのインスタンス。
my $request = new HTTP::Request($method, $url, $header, $content); my $response = $ua->request($request);
リダイレクトや認証は適切に扱われるので、複数のリクエストが実行される場合がある。その場合の最終リクエストは、$response->requestで取得できる。
$ua->get($url)、$ua->post($url, \%form) などのコンビニエンス関数の呼び出しは、最終的にこのメソッドで処理される。
デフォルトではSSLに対応していないが、Crypt::SSLeayをインストールすれば使えるようになる*3。