LWP :: UserAgent - HTTP :: Запрос - PullRequest
2 голосов
/ 30 июля 2011

Если я сделаю это

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

5 голосов
/ 30 июля 2011

Чтобы получить объект запроса, который был создан для вас:

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);
2 голосов
/ 30 июля 2011

HTTP::Request используется внутренне LWP::UserAgent, и если они вернут его с помощью get или post -методов, это будет уже слишком поздно, так как запрос уже выполнен.Но они, очевидно, предвидели необходимость доступа к объекту запроса, поэтому они реализовали обратные вызовы, чтобы вы могли изменить запрос перед его отправкой:

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

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

Так что если вам нужен доступ к объекту запроса без его создания инастройка - обратные вызовы - путь.

1 голос
/ 30 июля 2011

Какие HTTP::Request методы вы хотите вызвать?И на какой объект запроса?Последний запрос, сделанный $ua?

Насколько я могу судить, LWP::get не сохраняет последний запрос, созданный / отправленный в любом месте.

...