Faraday: Zlib::DataError pada Dapatkan permintaan

Dibuat pada 16 Feb 2012  ·  9Komentar  ·  Sumber: lostisland/faraday

Saya melihat beberapa url yang ketika diminta menghasilkan kesalahan 'Zlib::DataError: metode kompresi tidak diketahui'

/faraday/adapter/net_http.rb:59:di call' /faraday/request/url_encoded.rb:14:in call'
/faraday/connection.rb:215:di run_request' /faraday/connection.rb:88:in dapatkan'
/faraday-a1c2dcf1c5c0/lib/faraday.rb:24:dalam `method_missing'

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

Saya telah menguji pada 0.7.6 dan 0.8.RC2 pada Ruby 1.9.3.

Saya juga menguji HTTParty pada url yang sama dan tampaknya berfungsi...tetapi saya belum menggali lebih jauh.

Terima kasih,
skot

Komentar yang paling membantu

Server mengirimkan respons menggunakan metode kompresi yang tidak didukung. Sepertinya itu kesalahan server.

Anda dapat mencoba mengatasinya dengan mengatur header permintaan:

"accept-encoding" => "tidak ada"

Tidak yakin apakah ini akan berhasil. Anda juga dapat menggunakan adaptor lain, seperti Typhoeus.

Semua 9 komentar

Melihat ke sumber di net_http.rb dan membandingkannya dengan HTTParty:

  • Faraday menggunakan .get dengan komentar tentang penggunaan get alih-alih request karena Ruby 1.9 menangani gzip.
  • HTTParty menggunakan .get dan menyerahkan kompresi/pengempisan sendiri.

Sepertinya bug itu sebenarnya ada di Ruby. Berikut adalah sampel pembersih:

memerlukan 'bersih/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)
permintaan = Net::HTTP::Get.new(uri.request_uri)

http.request(permintaan).kode #ok
http.get(permintaan).kode #gagal

Net::HTTP#get tidak dimaksudkan untuk menerima objek permintaan, ia mengharapkan jalur dan (opsional) header. Itu kemudian membangun permintaannya sendiri. Lihat http://rubydoc.info/stdlib/net/1.9.2/Net/HTTP#get -instance_method

Server mengirimkan respons menggunakan metode kompresi yang tidak didukung. Sepertinya itu kesalahan server.

Anda dapat mencoba mengatasinya dengan mengatur header permintaan:

"accept-encoding" => "tidak ada"

Tidak yakin apakah ini akan berhasil. Anda juga dapat menggunakan adaptor lain, seperti Typhoeus.

Ini adalah kutu rubi.

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

Mendapatkan:

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

@mislav pengaturan "accept-encoding" => "none" memperbaiki kesalahan zlib yang saya perjuangkan. Terima kasih.

Maaf jika ini jelas tetapi bagaimana saya melakukan ini dengan tepat?

@roryc89 Saat Anda membuat objek koneksi:

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

Atau per permintaan:

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

@mislav pengaturan "accept-encoding" => "none" memperbaiki kesalahan zlib untuk saya juga, terima kasih! 👍

Ini bekerja untuk saya juga, Terima kasih kawan!!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat