web-dev-qa-db-ja.com

Java:送信する前にHttpURLConnectionの要求を表示します

HttpURLConnectionを使用してサーバーに対していくつかのAPI呼び出しを行いたい。しかし、リクエストは成功せず、次のように返されます。

<error>
  <http_status>400 Bad Request</http_status>
  <message>Unexpected request Content-Type header ''. Expecting 'application/x-www-form-urlencoded'.</message>
</error>

そこで、サーバーに送信されている「実際の」コンテンツを確認したいと思います。実際のコンテンツとは、正確なHTTPリクエストを意味します。

私がこれをどのように見ることができるかについてのアイデアはありますか?

編集:ここでの最初の回答に基づいて、問題を明確にする必要があります。HTTPスニファなどの外部プログラムの使用を避けたいので、関数やプロパティなどが保持されていることを期待していました。私が探している情報。

そうでない場合は、この情報を手動で再構築できるかどうかを誰かが知っていますか(たとえば、getRequestMethod()などのいくつかの関数を呼び出すことによって)

私はこの問題に頻繁に直面しているので、そのような機能を自分で構築する価値があります。方法を知る必要があります:)

21
Hirnhamster

Java.loggingを有効にすることで、HttpURLConnectionをデバッグモードにすることができます。

-Djava.util.logging.config.file=logging.properties

そしてlogging.properties(デフォルトではJRE_HOME\lib)に次のプロパティを入れます

Sun.net.www.protocol.http.HttpURLConnection.level = ALL
14
RealHowTo

tcpdumpは機能しますが、希望どおりに動作させるのは難しい場合があります。 NetCatの方がユーザーフレンドリーです(プロジェクトページは次のとおりです: http://netcat.sourceforge.net/ -ほとんどのUnixプラットフォームにはすでに含まれています)。

nc -l 9999

これはTCPポート9999でリッスンし、HTTPクライアントが接続すると、リクエストの全文を出力します。

5
Mike Baranczak

Tcpdumpのようなものを使用します。これは、コンピューターによって送信または受信される実際のネットワークパケットをダンプできます。

0