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
Examinez la source sur net_http.rb et comparez-la à HTTParty :
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 !!
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.