如何正确检查Net :: HTTP :: Get(例如)的响应是否为"成功"(即2xx返回码)?在这个简单的问题上,文档似乎很遗憾.
我有:
response=Net::HTTP.new( host, port ).request my_get_request # details not important
Run Code Online (Sandbox Code Playgroud)
经过一堆谷歌搜索和近乎随机的打字,我终于确定这是有效的:
response.class < Net::HTTPSuccess
Run Code Online (Sandbox Code Playgroud)
这实际上是规范的方式吗?
And*_*all 70
对于Net::HTTP
,是的,检查响应对象的类是这样做的方法.使用kind_of?
更清晰(但在功能上等同于使用<
):
response.kind_of? Net::HTTPSuccess
Run Code Online (Sandbox Code Playgroud)
调用value
上response
也将提高一个Net::HTTPError
如果状态代码是不是成功的(什么命名方法很差......).
如果可以,您可能需要考虑使用gem而不是Net::HTTP
,因为它们通常提供更好的API和性能.百头巨怪和HTTParty两个很好的人,等等.
tan*_*rix 17
您可以利用Ruby的case
语句,该语句惯用于执行类比较,这要归功于它在引擎盖下使用===.
以下是来自JSON客户端的示例,它捕获特定错误,但只返回服务器的消息:
case response
when Net::HTTPSuccess
JSON.parse response.body
when Net::HTTPUnauthorized
{'error' => "#{response.message}: username and password set and correct?"}
when Net::HTTPServerError
{'error' => "#{response.message}: try again later?"}
else
{'error' => response.message}
end
Run Code Online (Sandbox Code Playgroud)
注意上面的Net :: HTTPResponse父类(例如Net::HTTPServerError
)也可以工作.
归档时间: |
|
查看次数: |
31760 次 |
最近记录: |