Mechanize::ResponseReadError - Content-Length не соответствует длине тела ответа

Я столкнулся с этой ошибкой при запросе страницы с Mechanize:

Mechanize::ResponseReadError
Content-Length (17317) не соответствует длине тела ответа (17070) (Mechanize::ResponseReadError)

Любые мысли о том, почему это происходит и как я могу это исправить, очень ценятся!


person Severin    schedule 28.05.2014    source источник
comment
Можете ли вы перехватить ответ и проверить, действительно ли тело ответа короче Content-Length?   -  person Slicedpan    schedule 28.05.2014


Ответы (2)


Бывает, что сайты возвращают неверное значение длины контента. Перехватите ошибку и принудительно выполните синтаксический анализ страницы.

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

Вы также можете установить agent.ignore_bad_chunking в значение true, но тогда остерегайтесь возможной потери контента без вывода сообщений.

person i-blis    schedule 28.05.2014

Это происходит из-за того, что Content-Length заголовок не равен размеру response-body длины.

Ознакомьтесь со спецификациями ниже, предоставленными механизмом. это вызовет ту же ошибку.

  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
person Paritosh Piplewar    schedule 28.05.2014