我最近从 Ruby 的 Net:HTTP 类切换到 Rest-client 1.6.7。
我发现形成请求要容易得多,但与 Net:HTTP 请求不同,当 Rest-client 收到 200 以外的任何内容时,请求就会终止。我尝试在 RestClient.get 之后直接放置一个断点,但它永远不会被击中 - 所以我做错了。
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
结果是这个堆栈跟踪:
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'
有人可以告诉我如何正确评估响应代码并防止发生此异常......?
参见标题例外情况 on http://rubydoc.info/gems/rest-client/ http://rubydoc.info/gems/rest-client/
- 对于 200 到 207 之间的结果代码,将返回 RestClient::Response
- 对于结果代码 301、302 或 307,如果请求是 get 或 head,则将遵循重定向
- 对于结果代码 303,将遵循重定向并将请求转换为 get
- 对于其他情况,将引发持有响应的 RestClient::Exception,对于已知的错误代码,将抛出特定的异常类
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)