我们在使用rest-client去发出请求时,result code是200 固然很好,但有时候我们也希望能读取到Exceptions, 例如读取result code是400bad request的response内容,怎么做?
看个例子。
正文
场景:用户A想要通过接口获取到个人信息,代码如下:
respoonse = RestClient.get 'http://example.com/myprofile?access_token=#{access_token}'
profile_response = JSON.parse(respoonse.body)
其中,如果access_token
过期或者无效,用户希望得到这样的结果:
- 返回 400 Bad Request
- 返回一个JSON格式的reponse body ,内容像这样:
{
"code": 400,
"error": {
"message": "The access token could not be decrypted",
"type": "OAuthException"
}
}
这时,如果你的access_token
是过期或者无效的,终端运行的时候,会报错400 Bad Request ,但是却没有返回对应的response。
如何解决?
其实,如果你熟悉ruby的异常处理,就会发现很简单,把上述的代码改成如下:
body = begin
respoonse = RestClient.get 'http://example.com/myprofile?access_token=#{access_token}'
response.body
rescue RestClient::ExceptionWithResponse => e
e.response.body
end
profile_response = JSON.parse(body)
这里,使用了rescue RestClient::ExceptionWithResponse => e
获取异常对象,并赋给了变量e,通过e.response.body
来回传需要的error信息。
大功告成。
其实,看到这里,你就明白,不仅仅是 400bad request的response内容可以读取,其他如403 Forbidden,404 not found 等的response内容也是可以依葫芦画瓢来做的。:P
The end
参考: