Error Ruby Net:: ReadTimeout
api httparty (1)
De los documentos de Ruby: http://ruby-doc.org/stdlib-2.1.2/libdoc/net/http/rdoc/Net/HTTP.html
Número de segundos a esperar para que se lea un bloque (mediante una llamada de lectura (2)). Se puede usar cualquier número, incluyendo Flotantes por segundos fraccionarios. Si el objeto HTTP no puede leer datos en estos segundos, genera una excepción Net :: ReadTimeout. El valor predeterminado es 60 segundos.
¿Qué es la call
? ¿Son los puntos finales del servicio diferentes? ¿Estás paginando a través de los registros? Las API a menudo clasifican el límite de llamadas para evitar ataques DDOS. Puede intentar envolver sus llamadas a la API en alguna lógica de reintento o agregar algún código de suspensión.
Estoy haciendo una serie de llamadas API usando httparty. Las dos primeras llamadas a la API tienen éxito, pero la tercera falla. Se detiene por unos 60 segundos (tiempo de espera predeterminado) y luego devuelve este error:
/Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/protocol.rb:158:in `rescue in rbuf_fill'': Net::ReadTimeout (Net::ReadTimeout)
from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/protocol.rb:152:in `rbuf_fill''
from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/protocol.rb:134:in `readuntil''
from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/protocol.rb:144:in `readline''
from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http/response.rb:39:in `read_status_line''
from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http/response.rb:28:in `read_new''
from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:1406:in `block in transport_request''
from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:1403:in `catch''
from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:1403:in `transport_request''
from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:1376:in `request''
from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:1369:in `block in request''
from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:852:in `start''
from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:1367:in `request''
from /Users/luigi/.rvm/gems/ruby-2.0.0-p247@pdf/gems/httparty-0.12.0/lib/httparty/request.rb:93:in `perform''
from /Users/luigi/.rvm/gems/ruby-2.0.0-p247@pdf/gems/httparty-0.12.0/lib/httparty.rb:486:in `perform_request''
from /Users/luigi/.rvm/gems/ruby-2.0.0-p247@pdf/gems/httparty-0.12.0/lib/httparty.rb:423:in `get''
from /Users/jmccann/.rvm/gems/ruby-2.0.0-p247@pdf/gems/httparty-0.12.0/lib/httparty.rb:518:in `get''
Mi pregunta es ¿por qué sucede esto? ¿Es este error indicativo de un error con la API, o hay algo que podría hacer para causarlo?
Mi código:
Esta es la llamada que funciona:
url = HTTParty.get("https://dev.test.com#{call}",
:basic_auth => auth,
:headers => {''Accept'' => ''application/json'' } )
Esta es la llamada que no funciona:
url = HTTParty.get("https://dev.test.com#{call}",
:basic_auth => auth,
:headers => {''Accept'' => ''application/json'' } )
Lo único que cambia es la call
real, pero ambas son llamadas válidas de acuerdo con la documentación de la API.