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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取完整的HTTP请求(不是响应)标头相关的知识,希望对你有一定的参考价值。

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

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()     . "

" .
      $response->headers()->as_string . "

" .
      $response->content              . "

";

$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()     . "

" .
      $response->headers()->as_string . "

" .
      $response->content              . "

";

现在,我想要查看完整的HTTP请求标头,而不仅仅是响应标头。

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

答案

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

另一答案
print $response->request->as_string
另一答案

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

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

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

debug_ua( $browser );
另一答案

$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; }

以上是关于如何获取完整的HTTP请求(不是响应)标头的主要内容,如果未能解决你的问题,请参考以下文章

从 <img> 标签获取 HTTP 状态代码或响应标头?

使用 cURL 仅从 HTTP POST 获取响应标头

获取HTTP响应的所有标头,并在下一个HTTP请求中将其发回

如何在没有任何 vue 库的情况下在 vue 回调中获取 http 响应标头(axios)

我可以使用 tcpdump 获取 HTTP 请求、响应标头和响应正文吗?

如何获取 iframe 响应标头?