首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Ruby Rest-Client处理异常

如何使用Ruby Rest-Client处理异常
EN

Stack Overflow用户
提问于 2012-07-11 06:38:58
回答 5查看 47.2K关注 0票数 39

我最近从Ruby的Net:HTTP类切换到了rest-client 1.6.7。

我发现形成请求要容易得多,但与Net:HTTP请求不同的是,当rest-client获得200以外的任何值时,请求就会终止。我试着把断点直接放在RestClient.get后面,但它从来没有命中过--所以我做错了什么。

代码语言:javascript
复制
def get_member_using_card
  resource = "#{@settings_app_uri}api/v1/card/#{self.member_card_num}?token=#{@settings.api_key}"
  response = RestClient.get resource
  if response.code == 200 
    card = JSON.parse(response.body)
    self.customer_id = card['card']['customer_id']
  else
    return 0
  end
end

这将导致此堆栈跟踪:

代码语言:javascript
复制
RestClient::ResourceNotFound - 404 Resource Not Found:
        /Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/rest-client-1.6.7/lib/restclient/abstr
act_response.rb:48:in `return!'
        /Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/rest-client-1.6.7/lib/restclient/reque
st.rb:230:in `process_result'
        /Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/rest-client-1.6.7/lib/restclient/reque
st.rb:178:in `block in transmit'
        /Users/tim/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/net/http.rb:627:in `start'
        /Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/rest-client-1.6.7/lib/restclient/reque
st.rb:172:in `transmit'
        /Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/rest-client-1.6.7/lib/restclient/reque
st.rb:64:in `execute'
        /Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/rest-client-1.6.7/lib/restclient/reque
st.rb:33:in `execute'
        /Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/rest-client-1.6.7/lib/restclient.rb:68
:in `get'

谁能告诉我如何正确地评估响应代码并防止这种异常发生……?

EN

回答 5

Stack Overflow用户

发布于 2012-10-17 17:04:37

请参见标题Exceptions on http://rubydoc.info/gems/rest-client/

对于200和207之间的结果代码,将返回

  • 对于结果代码301、302或307,将返回
  • 如果结果代码303的请求是get或head
  • ,则将遵循重定向,并且将请求转换为get

异常对于其他情况,将引发保存响应的RestClient::

  • ,对于已知错误代码,将抛出特定异常类

< code >F212

代码语言:javascript
复制
RestClient.get 'http://example.com/resource'
➔ RestClient::ResourceNotFound: RestClient::ResourceNotFound`

begin
  RestClient.get 'http://example.com/resource'
rescue => e
  e.response
end
➔ 404 Resource Not Found | text/html 282 bytes
票数 58
EN

Stack Overflow用户

发布于 2013-02-22 23:50:41

同样在相同的文档@wich中,您可以向RestClient.get传递一个块,这样它就不会在非200响应代码上抛出异常:

代码语言:javascript
复制
# Don't raise exceptions but return the response
RestClient.get('http://example.com/resource'){|response, request, result| response }

请参阅“结果处理”部分from the documentation

票数 24
EN

Stack Overflow用户

发布于 2016-08-10 21:18:35

代码语言:javascript
复制
rescue RestClient::ExceptionWithResponse => err
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11423068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档