Java:发送前 HttpURL 连接的显示请求

2022-09-01 23:36:54

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

<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()等)。

我经常遇到这个问题,所以值得自己努力构建这样的功能。只需要知道:)


答案 1

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

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

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

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

答案 2

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

nc -l 9999

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


推荐