Mechanize :: ResponseReadError - Content-Length与响应主体长度不匹配

时间:2014-05-28 12:52:18

标签: ruby-on-rails ruby ruby-on-rails-4 mechanize mechanize-ruby

我在使用Mechanize请求页面时遇到此错误:

  

Mechanize :: ResponseReadError
Content-Length(17317)不匹配   响应体长度(17070)(Mechanize :: ResponseReadError)

对于为什么会发生这种情况以及如何解决这个问题的任何想法都非常感谢!

2 个答案:

答案 0 :(得分:1)

网站会返回错误的内容长度值。捕获错误并强制页面解析。

agent = Mechanize.new
begin
  page = agent.get 'http://bad.com'
rescue Mechanize::ResponseReadError => e
  page = e.force_parse
end

您也可以将agent.ignore_bad_chunking设置为true - 但请注意可能的静默内容丢失。

答案 1 :(得分:0)

这是因为Content-Length标题不等于response-body长度的大小。

检查mechanize gem拍摄的以下规格。它会引起同样的错误。

  def test_response_read_content_length_mismatch
    def @res.content_length() 5 end
    def @res.read_body() yield 'part' end

    e = assert_raises Mechanize::ResponseReadError do
      @agent.response_read @res, @req, @uri
    end

    assert_equal 'Content-Length (5) does not match response body length (4)' \
      ' (Mechanize::ResponseReadError)', e.message
  end