Ruby Mechanize Zlib :: BufError

不知道为什么我现在使用Mechanize gem得到这个错误 – 现在已经使用了一段时间没有问题。

我的脚本会随机停止并抛出以下错误:

/Users/username/.rvm/gems/ruby-1.9.3-p194/gems/mechanize-2.5.1/lib/mechanize/http/agent.rb:798:in `rescue in response_content_encoding': error handling content-encoding gzip: buffer error (Zlib::BufError) (Mechanize::Error) 

有任何想法吗?

您可能正在点击指向负载均衡器的URL。 负载均衡器背后的主机之一是错误配置的,或者它的配置与其同类不同 ,并且返回内容的gzip压缩版本,而其他内容则没有。 我过去见过这个问题。

我还看到服务器说它正在返回gzip压缩内容的情况,但是发送它没有压缩。 或者它可以发送压缩,而不是gzip压缩。 组合很多。

修复是为了确保您的代码能够感知返回的内容是否被压缩。 确保您将代码的正确可接受内容HTTP标头发送到他们的服务器。 你必须进行防御性编程并查看你得到的实际内容,然后进行分支以进行正确的解压缩,然后将其传递给解析。

通过设置如下所示的请求标头,我能够解决这个问题:

mechanize.request_headers = { "Accept-Encoding" => "" }