如何使用LWP :: UserAgent接受gzip压缩内容?

时间:2009-08-16 20:44:45

标签: perl lwp content-encoding

我使用Perl的LWP::UserAgent通过网络获取一些页面,并希望尽可能礼貌。默认情况下,LWP::UserAgent无法通过gzip无缝处理压缩内容。是否有一种简单的方法可以让它为每个人节省一些带宽?

1 个答案:

答案 0 :(得分:35)

由于HTTP::Message,LWP内置了此功能。但它有点隐藏。

首先确保您安装了Compress::Zlib,以便处理gzipHTTP::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;

这也会将文本解码为Perl的unicode字符串。如果希望LWP解压缩响应,而不是弄乱文本,请执行以下操作:

print $response->decoded_content(charset => 'none');