79 votes

Comment puis-je gérer les erreurs avec HTTParty ?

Je travaille sur une application Rails utilisant HTTParty pour effectuer des requêtes HTTP. Comment puis-je gérer les erreurs HTTP avec HTTParty ? Plus précisément, j'ai besoin d'attraper les erreurs HTTP 502 et 503 et d'autres erreurs comme les erreurs de connexion refusée et de dépassement de délai.

101voto

Jordan Points 26741

Une instance de HTTParty::Response a un code qui contient le code d'état de la réponse HTTP. Il est donné sous la forme d'un nombre entier. Donc, quelque chose comme ça :

response = HTTParty.get('http://twitter.com/statuses/public_timeline.json')

case response.code
  when 200
    puts "All good!"
  when 404
    puts "O noes not found!"
  when 500...600
    puts "ZOMG ERROR #{response.code}"
end

0 votes

Merci. C'est ce que j'avais prévu de faire. Je me demandais s'il y avait un autre moyen de gérer les erreurs.

51 votes

Cette réponse ne traite pas des échecs de connexion.

2 votes

Pour ce qui est du commentaire de preethinarayan, si vous voulez attraper/sauvegarder les erreurs à la place, vous pouvez toujours faire quelque chose comme : raise blablahblah if response.code != 200 Je vais en fait faire quelque chose de similaire...

50voto

mklb Points 987

Cette réponse concerne les échecs de connexion. Si une URL n'est pas trouvée, le code d'état ne vous aidera pas. Sauvez-le comme ceci :

 begin
   HTTParty.get('http://google.com')
 rescue HTTParty::Error
   # don´t do anything / whatever
 rescue StandardError
   # rescue instances of StandardError,
   # i.e. Timeout::Error, SocketError etc
 end

Pour plus d'informations, voir : ce problème github

28voto

Artur Beljajev Points 11

Vous pouvez également utiliser des méthodes de prédicat très pratiques telles que success? ou bad_gateway? de cette façon :

response = HTTParty.post(uri, options)
p response.success?

La liste complète des réponses possibles se trouve sous Rack::Utils::SYMBOL_TO_STATUS_CODE constant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X