2011-07-30 28 views
2

私はこのLWP :: UserAgentの - HTTP ::リクエスト

#!/usr/local/bin/perl 
use warnings; 
use 5.014; 
use LWP::UserAgent; 

my $ua = LWP::UserAgent->new(); 
my $res = $ua->get('http://www.perl.org'); 

をすれば、私は$resオブジェクトからHTTP::Requestメソッドを呼び出すために何とか可能です。この

say $res->code; 

ようHTTP::Responseメソッドを呼び出すことができますかHTTP::Requestオブジェクトを明示的に作成する必要がありますか?


my $ua = LWP::UserAgent->new(); 

my $method; 

my $res = $ua->get('http://www.perl.org'); 

$ua->add_handler(request_prepare => sub { my($request, $ua, $h) = @_; $method = $request->method; }, ); 

say $method; # Use of uninitialized value $method in say 

答えて

2

HTTP::RequestLWP::UserAgentによって内部的に使用され、それらがgetまたはpost -methodsを経由して、それを返す場合は、要求がすでに行われているので、それはすでに手遅れだろう。だから、

$ua->add_handler(request_prepare => sub { 
    my($request, $ua, $h) = @_; 

    # $request is a HTPP::Request 
    $request->header("X-Reason" => "just checkin"); 
}); 

をあなたはそれを作成せずに、要求オブジェクトにアクセスする必要がある場合:彼らはそれが送信される前にあなたが要求を変更することができるように、コールバックを実装するように、しかし、彼らは明らかにリクエストオブジェクトにアクセスするための必要性を予見していますそれを設定する - コールバックは行く方法です。

+0

なぜ追加された例が動作しないオブジェクトの要求を作成するために

my $response = $ua->get('http://www.example.com/'); my $request = ($response->redirects, $response)[0]->request; 

が容易にされることがあります。 –

+1

'get'や' post'メソッドの前に 'add_handler'を呼び出さなければなりません。あなたの例では、ハンドラは 'get'の後に追加され、呼び出されません。 – vstm

1

どのような方法でHTTP::Requestのメソッドを呼び出しますか?そして、どの要求オブジェクトに? $uaによる最後のリクエスト?

私が知る限り、LWP::getはどこにでも作成/送信された最後のリクエストを保存しません。 (印刷ちょうど私が期待通りに自分が

use HTTP::Request::Common qw(GET); 
my $request = GET('http://www.example.com/'); 
my $response = $ua->request($request); 
+0

レスポンスオブジェクトに保存されます。私の答えを見てください。 – ikegami

5

はあなたのために作成されたリクエスト・オブジェクトを取得するにはリクエストメソッド)?
関連する問題