2

如果我这样做

#!/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
4

3 回答 3

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);
于 2011-07-30T17:26:54.627 回答
2

HTTP::Request内部使用LWP::UserAgent,如果他们将通过getpost-Methods 返回它已经为时已晚,因为请求已经完成。但是他们显然已经预见到访问请求对象的需要,因此他们实现了回调,以便您可以在发送请求之前对其进行修改:

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

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

因此,如果您需要访问请求对象而不创建和设置它 - 回调是要走的路。

于 2011-07-30T16:03:55.053 回答
1

HTTP::Request你想调用哪些方法?在哪个请求对象上?的最后一个请求$ua

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

于 2011-07-30T16:04:55.503 回答