75

我正在开发一个使用 HTTParty 发出 HTTP 请求的 Rails 应用程序。如何使用 HTTParty 处理 HTTP 错误?具体来说,我需要捕获 HTTP 502 和 503 以及其他错误,例如连接被拒绝和超时错误。

4

3 回答 3

98

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
于 2011-10-26T22:46:29.587 回答
47

此答案解决了连接故障。如果未找到 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

有关更多信息,请参阅:此 github 问题

于 2014-11-05T22:08:25.160 回答
21

你也可以使用这样方便的谓词方法,如success?bad_gateway?以这种方式:

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

可能的响应的完整列表可以在Rack::Utils::SYMBOL_TO_STATUS_CODE常量下找到。

于 2016-06-22T03:17:01.690 回答