如何获得完整的 HTTP 请求(不是响应)headers
How to get full HTTP request (not response) headers
我有这样一个简单的代码:
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 请求 headers,而不仅仅是响应 headers。
我该怎么做?必须向此代码添加什么?
我认为您的现有代码中几乎已经包含了它。您正在使用 $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 的第一个和最后一个请求的 headers ,但这些并不完全是 Net::HTTP 发送的内容。例如Net::HTTP可以加一个Content-Length
header、一个TE
header、and/or等多个
Net::HTTP 不保留它实际发送的 header 的记录。为此,您将需要一个线路嗅探器(例如 tcpdump
)或一个调试代理(例如 Fiddler)。您还可以使用调试器或跟踪语句来查看在 Net::HTTP::Methods 的 format_request
中准备的请求。然而,最方便的可能是包装 Net::HTTP::Methods 的 format_request
.
除非初始请求被重定向,否则它们是相同的。要获取所有请求(和响应),您可以使用:
while ($response) {
my $request = $response->request;
...
$response = $response->previous;
}
我有这样一个简单的代码:
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 请求 headers,而不仅仅是响应 headers。
我该怎么做?必须向此代码添加什么?
我认为您的现有代码中几乎已经包含了它。您正在使用 $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 的第一个和最后一个请求的 headers ,但这些并不完全是 Net::HTTP 发送的内容。例如Net::HTTP可以加一个Content-Length
header、一个TE
header、and/or等多个
Net::HTTP 不保留它实际发送的 header 的记录。为此,您将需要一个线路嗅探器(例如 tcpdump
)或一个调试代理(例如 Fiddler)。您还可以使用调试器或跟踪语句来查看在 Net::HTTP::Methods 的 format_request
中准备的请求。然而,最方便的可能是包装 Net::HTTP::Methods 的 format_request
.
除非初始请求被重定向,否则它们是相同的。要获取所有请求(和响应),您可以使用:
while ($response) { my $request = $response->request; ... $response = $response->previous; }