我使用Perl的LWP :: UserAgent通过Web获取一些页面,并希望尽可能的礼貌。默认情况下,LWP :: UserAgent无法通过gzip无缝处理压缩内容。有没有办法做到这一点,为大家节省一些带宽?
解决方法
由于
HTTP::Message
,LWP具有内置的功能,但有一点隐藏。
首先确保你安装了Compress::Zlib
,以便您可以处理gzip。 HTTP::Message::decodable()
将根据您安装的模块输出允许的编码列表;在标量上下文中,此输出采用逗号分隔的字符串形式,您可以使用“Accept-Encoding”HTTP标头使用,LWP
需要您自己添加到HTTP::Request
。 (在我的系统上,安装了Compress::Zlib
,列表是“gzip,x-gzip,deflate”)。
当您的HTTP::Response
返回时,请务必使用$ response-> decoded_content而不是$ response->内容访问内容。
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;
这也将解码文本到Perl的unicode字符串。如果你只想要LWP
解压缩响应,而不是弄乱文本,那就这样做:
print $response->decoded_content(charset => 'none');