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.

preethinarayan
quelle

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
Jordan läuft
quelle
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

mklb
quelle
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.

Artur Beljajev
quelle
1
Ich habe gerade diesen Kommentar gelesen und er hat mir auch sehr geholfen! github.com/jnunemaker/httparty/issues/…
kangkyu