LWP :: UserAgent - HTTP :: Request

时间:2011-07-30 15:34:00

标签: perl http-request lwp-useragent

如果我这样做

#!/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' );

我可以调用HTTP::Response这样的方法

say $res->code;

是否有可能从HTTP::Request对象调用$res方法或者需要明确创建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

3 个答案:

答案 0 :(得分:5)

获取为您创建的请求对象:

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

自己创建请求对象可能更容易

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

答案 1 :(得分:2)

HTTP::RequestLWP::UserAgent在内部使用,如果他们通过getpost返回 - 方法已经太晚了,因为请求已经完成。但他们显然已经预见到需要访问请求对象,因此他们实现了回调,因此您可以在发送请求之前修改请求:

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

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

因此,如果您需要访问请求对象而不创建它并进行设置 - 回调是可行的方法。

答案 2 :(得分:1)

您想要调用哪种HTTP::Request方法?以及哪个请求对象? $ua的最后一次请求?

据我所知,LWP::get并未保存在任何地方创建/发送的最后一个请求。