English 中文(简体)
与WWW透明地处理GZip编码内容::机械化
原标题:
  • 时间:2009-05-17 09:50:17
  •  标签:

我用WWW:机械化和目前处理HTTP响应内容编码:gzip头在我的代码首先检查响应头,然后使用IO::解压::Gunzip未压缩的内容。

然而我想做这个透明的WWW::机械化方法,如表单()链接()和解析等工作未压缩的内容。自WWW:机械化是一个子类的LWP:: UserAgent,我更愿意使用LWP:: UA:处理程序。

虽然我已经部分成功(例如我可以打印未压缩的内容),我无法做这个透明的方式我可以打电话

$mech->forms();

总之:我如何“替换”美元机甲内的内容对象,从那时起,所有WWW:机械化方法好像内容编码从未发生过工作吗?

I would appreciate your attention and help. Thanks

最佳回答

WWW:机械化::GZip,我认为。

问题回答

在我看来,你可以通过使用替换$ res - >内容(字节)成员。

顺便说一下,我发现这东西看的来源LWP:: UserAgent,然后HTTP::响应,然后HTTP::消息。

它是建立在UserAgent从而使机械化。一个主要注意节省您的一些头发

——调试,确保你检查错误调用decoded_content后$ @。

$html = $r->decoded_content;
die $@ if $@;

更好的是,通过HTTP的来源:信息,确保所有的支持包

在我的例子中,decoded_content undef返回原始二进制内容时,我劳而无功的事。UserAgent将设置错误国旗解码失败,但机械化就忽略它(它并t检查或日志发生率为自己的错误/警告)。

在我的例子中$ @经济特区:“t能找到IO / HTML。点. .这是eval艾德

后进入源,我发现内置的解码过程很长,细致,而艰巨的,涵盖了每一个场景,使大量的猜测(谢谢Gisle !)。

如果你是多疑,显式地设置默认标题与每个请求使用新的()

    $browser = new WWW::Mechanize( default_headers  => HTTP::Headers->new( Accept-Encoding  
                            => scalar HTTP::Message::decodable()));




相关问题
热门标签