在Ruby rest-client中获取最后一个HTTPS请求(如php SoapClient中的__getLastRequest)

时间:2013-11-27 10:16:59

标签: ruby rest https rest-client

我正在使用ruby rest-client向Web服务发送请求。我的请求正在运行,但我希望看到发送给服务的实际请求。

我无法使用Wireshark或tcpdump执行此操作,因为我使用的是https而无法访问服务器私钥。

在php中,当我过去使用SoapClient时,我已经能够使用__getLastRequest函数来查看发送的xml(http://www.php.net/manual/en/soapclient.getlastrequest.php)。

有谁知道我看到发送到服务器的实际数据包的最佳方式?

非常感谢, d。

2 个答案:

答案 0 :(得分:2)

您可以将环境变量RESTCLIENT_LOG设置为stdoutstderr或文件名:

test.rb:

require 'rest-client'
RestClient.get "http://www.google.de"

呼叫:

RESTCLIENT_LOG=stderr ruby test.rb

输出:

RestClient.get "http://www.google.de", "Accept"=>"*/*; q=0.5, application/xml", "Accept-Encoding"=>"gzip, deflate"
# => 200 OK | text/html 10941 bytes

答案 1 :(得分:0)

如果您使用Net :: HTTP而不是rest-client,则可以使用http.set_debug_output $stderr查看请求和响应的内容:

require 'net/http'
require 'openssl'
uri = URI('https://myserverip/myuri')
http = Net::HTTP.new(uri.host, uri.port)
http.set_debug_output $stderr
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Get.new(uri.request_uri)
request.basic_auth 'username', 'password'
response = http.request(request)
@data = response.body
puts response.body

此外,使用Net :: HTTP,我也可以使用http = Net::HTTP::Proxy('127.0.0.1','8888').new(uri.host, uri.port)之类的内容将其传递给use a proxy

您也可以在RestClient.proxy = "http://127.0.0.1:8888/"等之前使用RestClient.get(url)对rest-client执行相同操作。

这样我可以通过Windows上的Fiddler2工具发送流量,然后查看我需要的所有细节。

遗憾的是,我找不到相当于Mac的Fiddler,因为那是我想写代码的地方。

看起来我要么必须重写我的代码才能使用HTTP :: Net而不是rest-client,要么全天候切换到Windows;),除非有人有任何其他想法。