如何获取完整的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
。
- 除非重定向初始请求,否则它们是相同的。要获取所有请求(和响应),您可以使用:
while ($response) { my $request = $response->request; ... $response = $response->previous; }
以上是关于如何获取完整的HTTP请求(不是响应)标头的主要内容,如果未能解决你的问题,请参考以下文章
获取HTTP响应的所有标头,并在下一个HTTP请求中将其发回
如何在没有任何 vue 库的情况下在 vue 回调中获取 http 响应标头(axios)