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)リクエスト処理しているようだ。