Faraday: Zlib::DataError при запросе Get

Созданный на 16 февр. 2012  ·  9Комментарии  ·  Источник: lostisland/faraday

Я вижу пару URL-адресов, которые при запросе приводят к ошибке «Zlib:: DataError: неизвестный метод сжатия».

/faraday/adapter/net_http.rb:59:in call' /faraday/request/url_encoded.rb:14:in call'
/faraday/connection.rb:215:in run_request' /faraday/connection.rb:88:in получить'
/faraday-a1c2dcf1c5c0/lib/faraday.rb:24:in `method_missing'

Пример:
Faraday.get('http://www.imaginativeuniversal.com/blog/post/2012/02/14/Why-the-Kinect-for-Windows-Sensor-Costs-2424999.aspx')

Я тестировал 0.7.6 и 0.8.RC2 на Ruby 1.9.3.

Я также протестировал HTTParty на том же URL-адресе, и, похоже, он работает... но я не стал копать дальше.

Спасибо,
Скотт

Самый полезный комментарий

Сервер отправляет ответ, используя неподдерживаемый метод сжатия. Похоже, это вина сервера.

Вы можете попробовать обойти это, установив заголовок запроса:

"принять кодировку" => "нет"

Не уверен, что это сработает. Вы также можете использовать другой адаптер, например Typhoeus.

Все 9 Комментарий

Глядя на исходник на net_http.rb и сравнивая его с HTTParty:

  • Фарадей использует .get с комментарием об использовании get вместо request, потому что Ruby 1.9 обрабатывает gzip.
  • HTTParty использует .get и выполняет сжатие/дефляцию самостоятельно.

Похоже, ошибка на самом деле в Ruby. Вот более чистый образец:

требуется 'сеть/https'

url = " http://www.imaginativeuniversal.com/blog/post/2012/02/14/Why-the-Kinect-for-Windows-Sensor-Costs-2424999.aspx "
uri = URI.parse(url)

http = Net::HTTP.new(uri.хост, uri.порт)
запрос = Net::HTTP::Get.new(uri.request_uri)

http.запрос(запрос).код #ok
http.get(запрос).код #сбой

Net::HTTP#get не предназначен для получения объекта запроса, он ожидает путь и (необязательно) заголовки. Затем он создает свой собственный запрос. См. http://rubydoc.info/stdlib/net/1.9.2/Net/HTTP#get -instance_method.

Сервер отправляет ответ, используя неподдерживаемый метод сжатия. Похоже, это вина сервера.

Вы можете попробовать обойти это, установив заголовок запроса:

"принять кодировку" => "нет"

Не уверен, что это сработает. Вы также можете использовать другой адаптер, например Typhoeus.

Это рубиновый жук.

url = "http://www.imaginativeuniversal.com/blog/post/2012/02/14/Why-the-Kinect-for-Windows-Sensor-Costs-2424999.aspx"
uri = URI.parse(url)

Net::HTTP.start(uri.host, uri.port) do |http|
  response = http.get(uri.request_uri)
  p response.body[0,100]
end

Получающий:

net/http.rb:1035:in `inflate': unknown compression method (Zlib::DataError)

Настройка @mislav «accept-encoding» => «none» исправила ошибку zlib, с которой я боролся. Спасибо.

Извините, если это очевидно, но как мне это сделать?

@ roryc89 Когда вы создаете объект соединения:

Faraday.new headers: { accept_encoding: 'none' } do |conn|
  # ...
end

Или по запросу:

conn.get '/foo/bar' do |req|
  req.headers[:accept_encoding] = 'none'
end

Настройка @mislav «accept-encoding» => «none» исправила ошибку zlib и для меня, спасибо! 👍

Это сработало и для меня, спасибо, ребята!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги