如何使用 LWP::UserAgent 接受 gzip 压缩内容?
-
18-09-2019 - |
题
我正在使用 Perl 在网络上获取一些页面 LWP::UserAgent
并且希望尽可能有礼貌。默认情况下, LWP::UserAgent
无法通过 gzip 无缝处理压缩内容。有没有一种简单的方法可以做到这一点,为每个人节省一些带宽?
解决方案
LWP 内置了此功能,这要归功于 HTTP::Message
. 。但它有点隐藏。
首先确保你有 Compress::Zlib
安装好后你就可以处理 gzip
. HTTP::Message::decodable()
将根据您安装的模块输出允许的编码列表;在标量上下文中,此输出采用逗号分隔的字符串形式,您可以将其与 ' 一起使用Accept-Encoding
' HTTP 标头,其中 LWP
要求您添加到您的 HTTP::Request
-你自己。(在我的系统上, Compress::Zlib
已安装,列表为“gzip
, x-gzip
, deflate
".)
当你的 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');
不隶属于 StackOverflow