我正在使用ruby rest-client向Web服务发送请求。我的请求正在运行,但我希望看到发送给服务的实际请求。
我无法使用Wireshark或tcpdump执行此操作,因为我使用的是https而无法访问服务器私钥。
在php中,当我过去使用SoapClient时,我已经能够使用__getLastRequest函数来查看发送的xml(http://www.php.net/manual/en/soapclient.getlastrequest.php)。
有谁知道我看到发送到服务器的实际数据包的最佳方式?
非常感谢, d。
答案 0 :(得分:2)
您可以将环境变量RESTCLIENT_LOG
设置为stdout
,stderr
或文件名:
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;),除非有人有任何其他想法。