У меня есть простой код, подобный этому:

use LWP::UserAgent;
use HTTP::Cookies;
use HTTP::Request;

my $cookies = HTTP::Cookies->new();
my $browser = LWP::UserAgent->new();
   $browser->agent(' ... ');    
   $browser->cookie_jar($cookies);   
my $request = HTTP::Request->new();     
my $response;                           
my $url;                                
my $referer;                                        

$referer = '';
$url = 'https:// ...'; # url #1
$request->url($url);
$request->method('GET');
$request->header('Referer' => $referer);    
$response = $browser->request($request);    
print $response->request()->uri()     . "\n\n" .
      $response->headers()->as_string . "\n\n" .
      $response->content              . "\n\n";

$referer = $response->request()->uri();
$url = 'https:// ... '; # url #2
$request->url($url);
$request->method('GET');
$request->header('Referer' => $referer);
$response = $browser->request($request);
print $response->request()->uri()     . "\n\n" .
      $response->headers()->as_string . "\n\n" .
      $response->content              . "\n\n";

Теперь я хочу также видеть полные HTTP заголовки запроса , а не только заголовки ответа.

Как мне это сделать? Что нужно добавить в этот код?

1
Ωmega 1 Мар 2018 в 00:27

4 ответа

Лучший ответ

Я думаю, что у вас почти есть это в вашем существующем коде. Вы получаете доступ к URI запроса с помощью $ response-> request () -> uri (). Запрос -> - это ваш объект HTTP :: Request. Я считаю, что вы можете использовать $ response-> request-> headers-> as_string, чтобы получить то, что вы хотите.

3
UncleCarl 28 Фев 2018 в 22:13
print $response->request->as_string
1
Borodin 28 Фев 2018 в 22:15

Это покажет вам запросы, а также ответы.

use LWP::UserAgent;
use LWP::ConsoleLogger::Easy qw( debug_ua );

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

debug_ua( $browser );
1
oalders 28 Фев 2018 в 22:48

$request->headers->as_string и $response->request->headers->as_string вы получите заголовки первого и последнего запроса, переданного в Net :: HTTP с помощью LWP [1] , но это не совсем то, что Net :: HTTP отправляет. Например, Net :: HTTP может добавить заголовок Content-Length, заголовок TE и / или ряд других.

Net :: HTTP не ведет запись заголовков, которые он фактически отправляет. Для этого вам понадобится анализатор проводов (например, tcpdump) или прокси-сервер отладки (например, Fiddler). Вы также можете использовать отладчик или операторы трассировки для просмотра запроса, подготовленного в {:: X1}} Net :: HTTP :: Methods. Однако наиболее удобным может быть упаковка {:: X2}} Net :: HTTP :: Methods.


  1. Это то же самое, если исходный запрос не был перенаправлен. Чтобы получить все запросы (и ответы), вы можете использовать:

    while ($response) {
       my $request = $response->request;
       ...
    
       $response = $response->previous;
    }
    
0
ikegami 1 Мар 2018 в 15:41