2011-10-26 95 views
58

我正在使用HTTParty来制作HTTP请求的Rails应用程序。我如何处理HTTParty的HTTP错误?具体来说,我需要捕获HTTP 502和其他错误,如连接被拒绝和超时错误。如何处理HTTParty错误?

回答

76

HTTParty::Response的一个实例具有code属性,其中包含HTTP响应的状态码。它以整数形式给出。所以,像这样:

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

谢谢!这就是我计划要做的。想知道是否有任何其他的方式来做错误处理。 – preethinarayan

+36

此答案不解决连接失败。 – gtd

+2

至于preethinarayan的评论,如果你想赶上/营救的错误,而不是,你总是可以做这样的事情: 提高blablahblah如果response.code = 200 实际上,我将做类似的东西.. – user435779

20

此答案解决了连接失败。如果找不到URL,状态码不会帮助你。拯救这样的:

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 

欲了解更多信息,请参阅:

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

完全可能的响应列表:this github issue

+8

千万别抓住一切。你应该赶上'HTTParty'的错误基类。 – Oleander

+0

也许这个想法是捕获HTTParty代码中的错误。 HTTParty可能会引发不是“HTTParty :: Errors”的错误。 –

+1

如果根本没有网络,我会得到一个'SocketError',只是需要注意的东西。你可以尝试拔掉你的以太网电缆,看看发生了什么。 – Kris

9

您也可以以这种方式使用这种方便的断言方法作为success?bad_gateway?可以在Net::HTTPResponse::CODE_TO_OBJ下找到常数。