Ruby 阅读400响应的正文?

Ruby 阅读400响应的正文?,ruby,rest-client,Ruby,Rest Client,我试图用rest客户机gem阅读400响应的主体。问题是,restclient通过将其作为错误抛出来响应400,因此我无法找到任何获取正文文本的方法 下面是一个激励性的例子。考虑调用脸谱网图形API: JSON.parse(RestClient.get("https://graph.facebook.com/me?fields=id,email,first_name,last_name&access_token=#{access_token}")) 如果访问令牌已过期或无效,faceb

我试图用
rest客户机
gem阅读400响应的主体。问题是,
restclient
通过将其作为错误抛出来响应400,因此我无法找到任何获取正文文本的方法

下面是一个激励性的例子。考虑调用脸谱网图形API:

JSON.parse(RestClient.get("https://graph.facebook.com/me?fields=id,email,first_name,last_name&access_token=#{access_token}"))
如果访问令牌已过期或无效,facebook会做两件事:

  • 返回400错误请求HTTP响应
  • 返回响应正文中包含更多信息的JSON,如下所示:
  • 因为400响应会引发错误,所以我不知道如何获取响应的主体。也就是说,如果我在curl或浏览器中运行上面的GET请求,我可以看到主体,但我不知道如何在restclient中访问它。下面是一个例子:

    begin
      fb_response = JSON.parse(RestClient.get("https://graph.facebook.com/me?fields=id,email,first_name,last_name&access_token=#{access_token}"))
    rescue => e
      # 400 response puts me here
      # How can I get the body of the above response now, so I can get details on the error?
      # eg, was it an expired token?  A malformed token?  Something else?
    end
    
    发件人:

    例外情况

    对于其他情况,将引发包含响应的RestClient::异常;将为已知错误代码引发特定的异常类

    您可以像这样重写代码:

    body = begin
      RestClient.get("https://graph.facebook.com/me?fields=id,email,first_name,last_name&access_token=#{access_token}")
    rescue => e
      e.response.body
    end
    fb_response = JSON.parse(body)
    
    或者只使用从异常获取响应主体。(这只是一条捷径)

    begin
      RestClient.get 'http://example.com/resource'
    rescue => e
      e.response
    end
    
    body = begin
      RestClient.get("https://graph.facebook.com/me?fields=id,email,first_name,last_name&access_token=#{access_token}")
    rescue => e
      e.response.body
    end
    fb_response = JSON.parse(body)