【发布时间】:2017-08-23 17:23:51
【问题描述】:
如果我使用 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 肯定不是那样发送的!该库必须已解析出用户名和密码,并添加了适当的标头,并添加了主机标头,等等。有没有一种简单的方法可以找出实际发送的内容?
【问题讨论】:
-
Re "
as_string
告诉我我刚刚发送了什么请求",不,它没有。 LWP::UserAgent 含义 LWP::Protocol 含义 LWP::Protocol::http 含义 Net::HTTP 不使用->as_string
。 -
我无法解析你写的内容。你是说请求最终会在 Net::HTTP 结束,它是真正写入套接字的那个,但它会写任何它想要的东西,并且实际上并没有告诉它的调用者它写了什么?
-
Net::HTTP 是使用 LWP::UserAgent 时执行实际提升的模块。 // 对。
-
Net::HTTP 是否在任何地方“保存其工作”?如果下面的答案是正确的,那肯定是必须的?
-
没有。也许某些更改最终会出现在 ::Request 对象中,但绝对不是全部,这就是为什么下面的答案说使用有线嗅探器或虚拟服务器的原因。
标签: perl lwp lwp-useragent