Java:在发送之前显示HttpURLConnection的请求

我想使用HttpURLConnection对服务器进行一些API调用。 但请求不成功,返回:

  400 Bad Request Unexpected request Content-Type header ''. Expecting 'application/x-www-form-urlencoded'.  

所以我想检查发送到服务器的“真实”内容是什么。 通过真实内容我的意思是确切的HTTP请求。

我有什么想法可以看到这个吗?

编辑:基于这里的第一个答案我应该澄清我的问题:我想避免使用像HTTP嗅探器或任何东西的外部程序,我希望有一个function或属性或任何持有我正在寻找的信息。

如果不是这样,有人知道是否可以手动重建此信息(例如通过调用getRequestMethod()等几个函数)

我经常遇到这个问题,所以我自己也要努力建立这样的function。 只需知道如何:)

您可以通过启用java.logging将HttpURLConnection置于调试模式

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

并将以下属性放入logging.properties(默认情况下在JRE_HOME \ lib中)

 sun.net.www.protocol.http.HttpURLConnection.level = ALL 

tcpdump会起作用,但很难让它做你想做的事情。 NetCat更加用户友好(这里是项目页面: http : //netcat.sourceforge.net/ – 大多数Unix平台已经包含它)。

 nc -l 9999 

这将侦听TCP端口9999,当HTTP客户端连接时,它将打印出请求的全文。

使用像tcpdump这样的东西,它可以转储计算机发出或接收的实际网络数据包。