Ruby Mechanize Zlib::Buferor

Ruby Mechanize Zlib::Buferor,ruby,mechanize,Ruby,Mechanize,不知道为什么我现在会在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 e

不知道为什么我现在会在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内容,但发送的是未压缩的内容。或者它可能是压缩发送,而不是压缩发送。组合有很多种


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

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


mechanize.request\u headers={“接受编码”=>“}

我想我们需要知道您在哪里接收数据,请给我们一个URL。我们还需要查看处理该请求的代码。这很有帮助-谢谢。我基本上是在创建一个bot/爬虫程序,它在站点上创建一个会话,并代表登录用户执行某些操作。我的大多数请求都是使用Mechanize进行POST的,但似乎其中一个GET请求出现了错误。也许我会显式地声明头,而不仅仅是使用
a.get
,然后看看它是如何运行的。您需要定义头。如果没有它们,您将是该系统开发人员的一时兴起。和他们在一起,好吧,至少你做了正确的事。很高兴这有帮助。将这种新发现的力量用于善,而不是恶。:-)这对我来说也是固定的,尽管我不知道为什么