了解LWP请求是如何“通过网络”发送的

时间:2017-08-23 17:23:51

标签: perl lwp lwp-useragent

如果我使用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

但肯定没有像这样发送网址!库必须已解析出用户名和密码,并添加了相应的标头,并添加了主机标头,依此类推。有没有一种简单的方法可以找出实际发送的内容?

1 个答案:

答案 0 :(得分:1)

LWP::ConsoleLogger::Everywhere 1 ,您可以加载它以获取请求和响应的所有详细信息。该请求将在通过网络发送之前进行,并在响应时发出响应。

您需要做的就是在代码中的任何位置use LWP::ConsoleLogger::Everywhere。如果您想要更多控制权,该分发中的主模块LWP::ConsoleLogger将允许您轻松调整设置。

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

$ nc -l 8080

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

screenshot of terminal

1)免责声明:我是该模块的撰稿人