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

How can I accept gzip-compressed content using LWP::UserAgent?

提问人:Ryan Tate 提问时间:8/17/2009 最后编辑:Ryan Tate 更新时间:4/10/2017 访问量:10875

问:

我正在使用 Perl 的 Web 获取一些页面,并希望尽可能礼貌。默认情况下,不会通过 gzip 无缝处理压缩内容。有没有一种简单的方法可以做到这一点,为每个人节省一些带宽?LWP::UserAgentLWP::UserAgent

Perl LWP 内容编码

评论


答:

43赞 Ryan Tate 8/17/2009 #1

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

首先,请确保您已安装 Compress::Zlib,以便您可以处理 .HTTP::Message::d ecodable() 将根据您安装的模块输出允许的编码列表;在标量上下文中,此输出采用逗号分隔的字符串形式,您可以将其与 '' HTTP 标头一起使用,LWP 要求您自己将其添加到 HTTP::Request-s 中。(在我的系统上,安装了 Compress::Zlib,列表是“、、”。gzipAccept-Encodinggzipx-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');

评论

4赞 Cas 4/3/2013
从我使用 LWP 6.03 的测试来看,所需要的只是使用而不是 .decoded_contentcontent