Rya*_*ate 22 perl content-encoding lwp
我使用Perl在网上获取一些页面,LWP::UserAgent并希望尽可能礼貌.默认情况下,LWP::UserAgent不通过gzip无缝处理压缩内容.是否有一种简单的方法可以实现这一目标,为每个人节省一些带宽?
Rya*_*ate 36
LWP内置了这种功能,多亏了HTTP::Message.但它有点隐藏.
首先确保已Compress::Zlib安装,以便您可以处理gzip.HTTP::Message::decodable()将根据您安装的模块输出允许的编码列表; 在标量上下文中,此输出采用逗号描述的字符串形式,您可以将其与Accept-Encoding'HTTP标头一起使用,这LWP需要您自己添加到HTTP::Request-s.(在我的系统,具有Compress::Zlib安装,名单" ,".)gzipx-gzipdeflate
当您HTTP::Response回来时,请确保使用$response->decoded_content而不是访问内容$response->content.
在LWP::UserAgent,这一切都像这样:
my $ua = LWP::UserAgent->new;
my $can_accept = HTTP::Message::decodable;
my $response = $ua->get('http://stackoverflow.com/feeds',
'Accept-Encoding' => $can_accept,
);
print $response->decoded_content;
Run Code Online (Sandbox Code Playgroud)
这也将解码文本到Perl的unicode字符串.如果你只需要LWP解压缩的反应,而不是与文字混乱,不喜欢这样:
print $response->decoded_content(charset => 'none');
Run Code Online (Sandbox Code Playgroud)