我有一个像这样的简单代码:
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 请求标头,而不仅仅是响应标头。
我该怎么办?什么必须添加到此代码?
答案 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
。
除非重定向初始请求,否则它们是相同的。要获取所有请求(和响应),您可以使用:
while ($response) {
my $request = $response->request;
...
$response = $response->previous;
}