2011-10-26 21 views
58

Sto lavorando a un'applicazione Rails utilizzando HTTParty per effettuare richieste HTTP. Come posso gestire gli errori HTTP con HTTParty? In particolare, ho bisogno di prendere HTTP 502 & 503 e altri errori come errori di connessione rifiutata e di timeout.Come posso gestire gli errori con HTTParty?

risposta

76

Un'istanza di HTTParty::Response ha un attributo code che contiene il codice di stato della risposta HTTP. È dato come un numero intero. Quindi, qualcosa di simile:

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

Grazie! Questo è quello che stavo pensando di fare. Mi chiedevo se esistesse un altro modo per gestire gli errori. – preethinarayan

+36

Questa risposta non risolve i problemi di connessione. – gtd

+2

Per quanto riguarda il commento di preethinarayan, se invece si desidera rilevare/salvare gli errori, si può sempre fare qualcosa del tipo: aumentare blablahblah se response.code! = 200 In realtà sto facendo qualcosa di simile .. – user435779

20

Questa risposta risolve errori di connessione. Se un URL non viene trovato, il codice di stato non ti aiuterà. Salvare in questo modo:

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 

Per ulteriori informazioni si veda: this github issue

+8

Non catturare mai tutto. Dovresti prendere la classe base di errore di 'HTTParty'. – Oleander

+0

Forse l'idea è di catturare errori nel codice HTTParty. HTTParty potrebbe generare errori che non sono 'HTTParty :: Errors'. –

+1

Se non c'è nessuna rete ottengo un 'SocketError', solo qualcosa di cui essere a conoscenza. Puoi provare a scollegare il cavo ethernet per vederlo accadere. – Kris

9

È anche possibile utilizzare tali metodi predicato a portata di mano come success? o bad_gateway? in questo modo:

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

Lista completa delle possibili risposte può essere trovato sotto la costante Net::HTTPResponse::CODE_TO_OBJ.

Problemi correlati