如何调试/显示使用RestClient发送的请求

时间:2014-05-05 01:14:38

标签: ruby http debugging rest-client

我正在尝试使用RestClient使用post方法访问Web服务。我正在发送指定的授权令牌,但我仍然收到403状态错误,这意味着我被禁止使用该API。有什么方法可以看到使用http post发送的请求,以便我可以验证标头?我无法找到任何示例或任何文件提及如何做到这一点?

我的代码与此类似:

token = get_token

response = RestClient.post "https://api-dev.xxx.com/software/services/search/ABC",
  :authorization => "Bearer #{token}"

5 个答案:

答案 0 :(得分:50)

如果您正在进行更多的REPL开发,那么就像添加

一样简单
RestClient.log = 'stdout'

代码。

您可以找到other valid values in the docs

答案 1 :(得分:23)

您可以尝试启用RestClient的日志记录,看看它是否提供了有用的输出:

RESTCLIENT_LOG=stdout path/to/my/program

或者如果您使用的是Rails

RESTCLIENT_LOG=stdout bundle exec passenger

用您选择的服务器替换passenger。这会将所有日志记录重定向到标准输出(您的控制台)。

当我需要检查或解决HTTP请求时,我个人更喜欢使用更详细的工具。

如果您更喜欢命令行,可以尝试curlwget,或者可以轻松执行请求的众多浏览器扩展之一,检查输出,保存以备将来使用,设置不同的环境PostmanAdvanced REST Client都是不错的选择。

答案 2 :(得分:2)

如果您不知道(或想要打扰)传递env。变量到您的应用程序(在我的情况下,它是乘客/ Rails),做类似的事情:

$ cat >/usr/share/foreman/config/initializers/00_rest_client.rb <<'EOT'
require 'rest_client'
RestClient.log =
  Object.new.tap do |proxy|
    def proxy.<<(message)
      Rails.logger.info message
    end
  end
EOT

答案 3 :(得分:1)

如果您手动制作请求,则可以使用inspect来显示完整网址

req = RestClient::Request.new(
    :method => :post,
    :url => "https://api-dev.xxx.com/software/services/search/ABC",
    headers: {params:{:authorization => "Bearer #{token}"}})

puts req.inspect

答案 4 :(得分:0)

您还可以从异常中获取请求:

def bla(token)
  response = RestClient.post "https://api-dev.xxx.com/software/services/search/ABC", :authorization => "Bearer #{token}"
rescue RestClient::Exception => e
   @logger.error "#{e.response.request.inspect}"
end