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

问题描述 投票:-1回答:4

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

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

我该怎么做?必须添加到此代码中的内容?

perl http-headers httprequest httpresponse user-agent
4个回答
2
投票

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


1
投票
print $response->request->as_string

1
投票

这将向您显示请求和响应。

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

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

debug_ua( $browser );

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; }
© www.soinside.com 2019 - 2024. All rights reserved.