23

我想使用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() 等多个函数等)

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

4

4 回答 4

14

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

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

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

sun.net.www.protocol.http.HttpURLConnection.level = ALL
于 2010-08-07T02:15:47.573 回答
5

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

nc -l 9999

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

于 2010-08-07T01:03:21.140 回答
3

接受的解决方案对我不起作用。但所做的是

static {
    ConsoleHandler handler = new ConsoleHandler();
    handler.setLevel(Level.ALL);
    Logger log = LogManager.getLogManager().getLogger("");
    log.addHandler(handler);
    log.setLevel(Level.ALL);
    System.setProperty("javax.net.debug","all"); 
}
于 2021-01-13T13:04:25.493 回答
0

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

于 2010-08-06T23:04:13.970 回答