Wie kann ich mit HTTParty mit Fehlern umgehen?


73

Ich arbeite an einer Rails-Anwendung, die HTTParty verwendet, um HTTP-Anforderungen zu stellen. Wie kann ich mit HTTParty mit HTTP-Fehlern umgehen? Insbesondere muss ich HTTP 502 & 503 und andere Fehler wie Verbindungsverweigerung und Timeout-Fehler abfangen.

Antworten:


95

Eine Instanz von HTTParty :: Response verfügt über ein codeAttribut, das den Statuscode der HTTP-Antwort enthält. Es wird als Ganzzahl angegeben. Also so etwas:

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

Vielen Dank! Das hatte ich vor. Ich habe mich gefragt, ob es eine andere Möglichkeit gibt, Fehler zu behandeln.
— Preethinarayan

48
Diese Antwort behandelt keine Verbindungsfehler.
— GTD

2
In Bezug auf den Kommentar von preethinarayan könnten Sie, wenn Sie stattdessen die Fehler abfangen / retten möchten, immer Folgendes tun: blablahblah erhöhen, wenn response.code! = 200 Ich werde tatsächlich etwas Ähnliches tun ...
— user435779

response.code gibt immer 200 zurück, wenn der Fehler in der Anwendung behandelt wird. Wie geht man das an?
— Infant Dev

41

Diese Antwort behebt Verbindungsfehler. Wenn eine URL nicht gefunden wird, hilft Ihnen der Statuscode nicht weiter. Rette es so:

 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

Weitere Informationen finden Sie unter: Dieses Github-Problem


11
Fang niemals alles. Sie sollten die HTTPartyFehlerbasisklasse abfangen .
— Linus Oleander

Möglicherweise besteht die Idee darin, Fehler im HTTParty-Code abzufangen. HTTParty kann Fehler auslösen, die dies nicht sind HTTParty::Errors.
— B Sieben

1
Wenn es überhaupt kein Netzwerk gibt, bekomme ich ein SocketError, nur etwas, das ich beachten muss. Sie können versuchen, Ihr Ethernet-Kabel abzuziehen, um dies zu sehen.
— Kris

Ich benutze HTTP_ERRORSvon Hosenträgern, github.com/thoughtbot/suspenders/blob/master/templates/… und HTTParty::Error rubydoc.info/github/jnunemaker/httparty/HTTParty/Error , zBrescue HTTParty::Error, *HTTP_ERRORS
— localhostdotdev

15

Sie können auch solche praktischen Prädikatmethoden wie success?oder bad_gateway?auf diese Weise verwenden:

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

Die vollständige Liste der möglichen Antworten finden Sie unter Rack::Utils::SYMBOL_TO_STATUS_CODEKonstante.


1
Ich habe gerade diesen Kommentar gelesen und er hat mir auch sehr geholfen! github.com/jnunemaker/httparty/issues/…
— kangkyu
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.