查看 LWP 请求是如何发送的 "over the wire"

find out how an LWP request was sent "over the wire"

如果我使用 LWP 发送请求,有一个方便的函数 as_string 可以告诉我刚刚发送了什么请求。非常方便,事实上我对它没有任何问题。除了我刚刚注意到它肯定是在骗我。例如,这段代码:

use v5.14.2;
use LWP;
my $response = LWP::UserAgent->new->get('http://user:pswd@example.com/');
say $response->request->as_string;

给出这个输出

GET http://user:pswd@example.com/
User-Agent: libwww-perl/6.13

但 URL 肯定不是那样发送的!图书馆肯定已经解析出用户名和密码,并添加了适当的header,并添加了一个主机header,等等。有没有一种简单的方法可以找出实际发送的内容?

LWP::ConsoleLogger::Everywhere1,您只需加载它即可获取请求和响应的所有详细信息。请求将在通过网络发送之前立即获取,并在返回时响应。

您只需 use LWP::ConsoleLogger::Everywhere 代码中的任意位置即可。如果您想要更多控制权,该发行版中的主模块 LWP::ConsoleLogger 可让您轻松调整设置。

但是,这不是通过网络传输的真实数据。如果您想知道它接收到什么,您需要使用 tcpdump 之类的东西监视连接然后查看它(这是非常高级的网络东西),或者可能将端点更改为您自己的 IP 地址,或简单地 127.0.0.1,然后使用 netcat 侦听特定端口。

$ nc -l 8080

如果您将请求发送到该端口,您将在 netcat 中看到它。


1) 免责声明:我是该模块的贡献者