Ich sehe ein paar URLs, die, wenn sie angefordert werden, zu einem Fehler „Zlib::DataError: unknown compression method“ führen.
/faraday/adapter/net_http.rb:59:in call'
/faraday/request/url_encoded.rb:14:in
Anruf'
/faraday/connection.rb:215:in run_request'
/faraday/connection.rb:88:in
bekommen'
/faraday-a1c2dcf1c5c0/lib/faraday.rb:24:in `method_missing'
Beispiel:
Faraday.get('http://www.imaginativeuniversal.com/blog/post/2012/02/14/Why-the-Kinect-for-Windows-Sensor-Costs-2424999.aspx')
Ich habe auf 0.7.6 und 0.8.RC2 auf Ruby 1.9.3 getestet.
Ich habe HTTParty auch auf derselben URL getestet und es scheint zu funktionieren ... aber ich habe nicht viel weiter gegraben.
Danke,
Scott
Schauen Sie sich die Quelle auf net_http.rb an und vergleichen Sie sie mit HTTParty:
Es sieht so aus, als ob der Fehler tatsächlich in Ruby steckt. Hier ist ein sauberes Beispiel:
erfordert '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)
Anfrage = Net::HTTP::Get.new(uri.request_uri)
http.request(request).code #ok
http.get(request).code #fails
Net::HTTP#get
soll kein Request-Objekt empfangen, es erwartet einen Pfad und (optional) Header. Es baut dann seine eigene Anfrage auf. Siehe http://rubydoc.info/stdlib/net/1.9.2/Net/HTTP#get -instance_method
Der Server sendet die Antwort mit einer nicht unterstützten Komprimierungsmethode. Scheint die Schuld des Servers zu sein.
Sie können versuchen, dies zu umgehen, indem Sie einen Anforderungsheader festlegen:
"accept-encoding" => "none"
Nicht sicher, ob dies funktionieren wird. Sie können auch einen anderen Adapter verwenden, z. B. Typhoeus.
Es ist ein Rubin-Bug.
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
Bekommen:
net/http.rb:1035:in `inflate': unknown compression method (Zlib::DataError)
Die @mislav -Einstellung "accept-encoding" => "none" hat den zlib-Fehler behoben, gegen den ich gekämpft habe. Danke.
Entschuldigung, wenn das offensichtlich ist, aber wie mache ich das genau?
@roryc89 Wenn Sie ein Verbindungsobjekt erstellen:
Faraday.new headers: { accept_encoding: 'none' } do |conn|
# ...
end
Oder auf Anfrage:
conn.get '/foo/bar' do |req|
req.headers[:accept_encoding] = 'none'
end
@mislav Einstellung "accept-encoding" => "none" hat den zlib-Fehler auch für mich behoben, danke! 👍
Das hat bei mir auch funktioniert, danke Jungs!!
Hilfreichster Kommentar
Der Server sendet die Antwort mit einer nicht unterstützten Komprimierungsmethode. Scheint die Schuld des Servers zu sein.
Sie können versuchen, dies zu umgehen, indem Sie einen Anforderungsheader festlegen:
"accept-encoding" => "none"
Nicht sicher, ob dies funktionieren wird. Sie können auch einen anderen Adapter verwenden, z. B. Typhoeus.