5

不知道为什么我现在在使用 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)

有任何想法吗?

4

2 回答 2

5

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

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

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

于 2013-08-14T23:14:38.953 回答
5

我可以通过设置如下请求标头来解决这个问题:

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

于 2014-11-05T16:09:43.257 回答