如何获取完整的HTTP请求(不是响应)标头

时间:2018-02-28 21:27:34

标签: perl http-headers httprequest httpresponse user-agent

我有一个像这样的简单代码:

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 请求标头,而不仅仅是响应标头。

我该怎么办?什么必须添加到此代码?

4 个答案:

答案 0 :(得分:2)

我认为你现有的代码中几乎已经有了它。您正在使用$ response-> request() - > uri()访问请求URI。 - > request()是您的HTTP :: Request对象。我相信你可以使用$ response-> request-> headers-> as_string来获得你想要的东西。

答案 1 :(得分:1)

print $response->request->as_string

答案 2 :(得分:1)

这将显示请求和回复。

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

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

debug_ua( $browser );

答案 3 :(得分:0)

$request->headers->as_string$response->request->headers->as_string你会得到LWP [1] 传递给Net :: HTTP的第一个和最后一个请求的标题,但这些不是Net :: HTTP发送的内容。例如,Net :: HTTP可以添加Content-Length标头,TE标头和/或其他许多标头。

Net :: HTTP不会记录它实际发送的标头。你需要一个有线嗅探器(例如tcpdump)或一个调试代理(例如Fiddler)。您还可以使用调试器或跟踪语句来查看在Net :: HTTP :: Methods的format_request中准备的请求。然而,最方便的可能是包装Net :: HTTP :: Methods的format_request

  1. 除非重定向初始请求,否则它们是相同的。要获取所有请求(和响应),您可以使用:

    while ($response) {
       my $request = $response->request;
       ...
    
       $response = $response->previous;
    }