加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:20:49 所属栏目:大数据 来源:网络整理
导读:我使用Perl的LWP :: UserAgent通过Web获取一些页面,并希望尽可能的礼貌。默认情况下,LWP :: UserAgent无法通过gzip无缝处理压缩内容。有没有办法做到这一点,为大家节省一些带宽? 解决方法 由于 HTTP::Message ,LWP具有内置的功能,但有一点隐藏。 首先
我使用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');

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读