Faraday: Zlib::DataError bei Get-Anfrage

Erstellt am 16. Feb. 2012  ·  9Kommentare  ·  Quelle: lostisland/faraday

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

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.

Alle 9 Kommentare

Schauen Sie sich die Quelle auf net_http.rb an und vergleichen Sie sie mit HTTParty:

  • Faraday verwendet .get mit einem Kommentar zur Verwendung von get anstelle von request, da Ruby 1.9 mit gzip umgeht.
  • HTTParty verwendet .get und handhabt die Komprimierung/Entleerung selbst.

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!!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

subvertallchris picture subvertallchris  ·  5Kommentare

yusefu picture yusefu  ·  3Kommentare

amrrbakry picture amrrbakry  ·  4Kommentare

jeffb-stell picture jeffb-stell  ·  5Kommentare

ioquatix picture ioquatix  ·  4Kommentare