Faraday: Zlib :: DataError sur la requête Get

Créé le 16 févr. 2012  ·  9Commentaires  ·  Source: lostisland/faraday

Je vois quelques URL qui, lorsqu'elles sont demandées, entraînent une erreur 'Zlib :: DataError : méthode de compression inconnue'

/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 get'
/faraday-a1c2dcf1c5c0/lib/faraday.rb:24:in `method_missing'

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

J'ai testé sur 0.7.6 et 0.8.RC2 sur Ruby 1.9.3.

J'ai également testé HTTParty sur la même URL et cela semble fonctionner... mais je n'ai pas creusé beaucoup plus loin.

Merci,
Scott

Commentaire le plus utile

Le serveur envoie la réponse à l'aide d'une méthode de compression non prise en charge. On dirait que c'est la faute du serveur.

Vous pouvez essayer de contourner ce problème en définissant un en-tête de requête :

"accepter-encodage" => "aucun"

Je ne sais pas si cela fonctionnera. Vous pouvez également utiliser un autre adaptateur, tel que Typhoeus.

Tous les 9 commentaires

Examinez la source sur net_http.rb et comparez-la à HTTParty :

  • Faraday utilise .get avec un commentaire sur l'utilisation de get au lieu de request car Ruby 1.9 gère gzip.
  • HTTParty utilise .get et gère lui-même la compression/dégonflage.

Il semble que le bogue soit en fait dans Ruby. Voici un échantillon plus propre :

nécessite 'net/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.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)

http.request(demande).code #ok
http.get(demande).code #échecs

Net::HTTP#get n'est pas destiné à recevoir un objet de requête, il attend un chemin et (éventuellement) des en-têtes. Il construit ensuite sa propre requête. Voir http://rubydoc.info/stdlib/net/1.9.2/Net/HTTP#get -instance_method

Le serveur envoie la réponse à l'aide d'une méthode de compression non prise en charge. On dirait que c'est la faute du serveur.

Vous pouvez essayer de contourner ce problème en définissant un en-tête de requête :

"accepter-encodage" => "aucun"

Je ne sais pas si cela fonctionnera. Vous pouvez également utiliser un autre adaptateur, tel que Typhoeus.

C'est un bug rubis.

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

Obtenir:

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

@mislav setting "accept-encoding" => "none" a corrigé l'erreur zlib que je combattais. Merci.

Désolé si c'est évident mais comment faire exactement ?

@roryc89 Lorsque vous construisez un objet de connexion :

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

Ou par demande :

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

@mislav setting "accept-encoding" => "none" a corrigé l'erreur zlib pour moi aussi, merci ! 👍

Cela a fonctionné pour moi aussi, merci les gars !!

Cette page vous a été utile?
0 / 5 - 0 notes