LWP::UserAgentでリダイレクトを追わない
PerlのLWP::UserAgentでリクエストを投げていると、リダイレクトを自動で追ってくれるので、例えば [302 Moved Temporarily] はLocationヘッダで指定されたURLを取ってきてくれて透過的に扱うことができる。
しかしこれが余計なお世話ということであれば、requestメソッドの代わりにsimple_requestメソッドを使えば良い。
#!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; my $ua = LWP::UserAgent->new; my $req = HTTP::Request->new(GET => "http://www.example.com/redirect/"); my $res = $ua->simple_request($req); print $res->as_string;
こうすれば、http://www.example.com/redirect/ が300系ステータスでどこかへのリダイレクトを返していたとしても、リダイレクト先を追わずに最初の一回のリクエストだけで終わってくれる。
ちなみに、$ perldoc LWP::UserAgent して読んでみれば分かるけど、そもそもrequestメソッドは内部ではsimple_requestメソッドを複数回実行することで透過的に(transparently)リクエスト処理しているようだ。