Faraday: Zlib::DataError na solicitação Get

Criado em 16 fev. 2012  ·  9Comentários  ·  Fonte: lostisland/faraday

Estou vendo alguns URLs que, quando solicitados, resultam em um erro 'Zlib::DataError: método de compactação desconhecido'

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

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

Eu testei em 0.7.6 e 0.8.RC2 em Ruby 1.9.3.

Eu também testei HTTParty na mesma url e parece funcionar... mas eu não cavei muito mais.

Obrigado,
Scott

Comentários muito úteis

O servidor está enviando a resposta usando um método de compactação não suportado. Parece que é culpa do servidor.

Você pode tentar contornar isso definindo um cabeçalho de solicitação:

"aceitar-codificação" => "nenhum"

Não tenho certeza se isso vai funcionar. Você também pode usar outro adaptador, como Typhoeus.

Todos 9 comentários

Olhando para a fonte em net_http.rb e comparando-a com HTTParty:

  • Faraday usa .get com um comentário sobre o uso de get em vez de request porque Ruby 1.9 lida com gzip.
  • HTTParty está usando .get e entregando compressão/deflação por conta própria.

Parece que o bug está realmente em Ruby. Aqui está uma amostra mais limpa:

requer '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)
solicitação = Net::HTTP::Get.new(uri.request_uri)

http.request(request).code #ok
http.get(request).code #fails

Net::HTTP#get não se destina a receber um objeto de solicitação, ele espera um caminho e (opcionalmente) cabeçalhos. Em seguida, ele cria sua própria solicitação. Consulte http://rubydoc.info/stdlib/net/1.9.2/Net/HTTP#get -instance_method

O servidor está enviando a resposta usando um método de compactação não suportado. Parece que é culpa do servidor.

Você pode tentar contornar isso definindo um cabeçalho de solicitação:

"aceitar-codificação" => "nenhum"

Não tenho certeza se isso vai funcionar. Você também pode usar outro adaptador, como Typhoeus.

É um inseto 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

Recebendo:

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

@mislav configuração "accept-encoding" => "none" corrigiu o erro zlib que eu estava lutando. Obrigado.

Desculpe se isso é óbvio, mas como faço isso exatamente?

@roryc89 Quando você está construindo um objeto de conexão:

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

Ou por solicitação:

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

@mislav configuração "accept-encoding" => "none" corrigiu o erro zlib para mim também, obrigado! 👍

Isso funcionou para mim também, obrigado pessoal !!

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

Lewiscowles1986 picture Lewiscowles1986  ·  4Comentários

yusefu picture yusefu  ·  3Comentários

aleksb86 picture aleksb86  ·  3Comentários

QuinnWilton picture QuinnWilton  ·  4Comentários

mattmill30 picture mattmill30  ·  4Comentários