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.