web-dev-qa-db-ja.com

デバッグ目的でNET:HTTPRequestに関する情報を出力するにはどうすればよいですか?

私はJavaから来たRubyに不慣れです。httpgetリクエストを作成しようとしていますが、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>

35
Upgradingdave

使用する 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 :)

67
August Lilleaas

ログ出力だけでなく、アプリが送信しているものを正確に確認およびデバッグしたい場合は、まさにこのためのオープンソースツールをリリースしました: http://httptoolkit.tech/view/Ruby/

ほぼすべてのRuby HTTPライブラリをサポートしているため、この場合は完全に機能しますが、他の多くのツールや言語(Python、Node、Chrome、Firefoxなど)もサポートします。

他の回答で述べたように、ログを印刷して実行内容を確認するようにNet :: HTTPを構成できますが、それは実行しようとしていることを示しているだけであり、他のHTTPライブラリまたはツールを使用している場合は役に立ちません(またはそうするモジュールを使用して)、実際のアプリケーションコードを変更する必要があります(そしてそれを元に戻すことを忘れないでください)。

HTTP Toolkitを使用すると、ボタンをクリックしてターミナルを開き、そこから通常どおりRubyコードを実行すると、送信されたすべてのHTTPリクエストが自動的に収集されます。

0
Tim Perry