如何打印有关NET:HTTPRequest的信息以进行调试?

时间:2010-01-24 20:35:27

标签: ruby http https

我是来自Java的Ruby的新手。我正在尝试发出一个http get请求,我得到一个400的http响应代码。我通过http调用的服务非常特别,我很确定我的请求不完全正确。在我执行头部请求(下面)之后“查看”req对象是有帮助的,以便仔细检查正在发送的request_headers是我认为我发送的内容。有没有办法打印出req对象?

req = Net::HTTP.new(url.host, url.port)
req.use_ssl = true

res = req.head(pathWithScope, request_headers)

code = res.code.to_i
puts "Response code: #{code}"

我试过这个:puts "Request Debug: #{req.inspect}"但它只打印出来:#<Net::HTTP www.blah.com:443 open=false>

2 个答案:

答案 0 :(得分:60)

使用set_debug_output

http = Net::HTTP.new(url.host, url.port)
http.set_debug_output($stdout) # Logger.new("foo.log") works too

http://github.com/augustl/net-http-cheat-sheet中的那个和更多:)

答案 1 :(得分:0)

如果您想准确地查看和调试应用程序正在发送的内容,而不只是查看其日志输出,我刚刚发布了一个开源工具,用于此目的:http://httptoolkit.tech/view/ruby/

它支持几乎所有的Ruby HTTP库,因此在这种情况下可以完美运行,而且还可以使用许多其他工具和语言(Python,Node,Chrome,Firefox等)。

如另一个答案中所述,您可以配置Net :: HTTP来打印其日志以了解其正在执行的操作,但这仅显示您正在尝试执行的操作,如果您使用任何其他HTTP则无济于事库或工具(或使用具有此功能的模块),并且它要求您更改实际的应用程序代码(并记住将其更改回去)。

使用HTTP工具包,您只需单击一个按钮即可打开终端,从那里正常运行Ruby代码,发送的每个HTTP请求都会自动收集。