我在另一个项目中使用了Jakarta commons HttpClient,我想要相同的wire logging输出,但使用的是“标准” HttpUrlConnection。

我已经使用Fiddler作为代理,但是我想直接从Java记录流量。

捕获连接输入和输出流的内容还不够,因为HTTP header 是由HttpUrlConnection类编写和使用的,因此我将无法记录 header 。

最佳答案

根据Sun's HttpURLConnection source的介绍,通过JUL有一些日志支持。

设置(根据需要调整路径):

-Djava.util.logging.config.file=/full/path/to/logging.properties

logging.properties:
handlers= java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level = FINEST
sun.net.www.protocol.http.HttpURLConnection.level=ALL

这将登录到控制台,根据需要进行调整,例如登录到文件。

输出示例:

2010-08-07 00:00:31 sun.net.www.protocol.http.HttpURLConnection writeRequests
FIN: sun.net.www.MessageHeader@16caf435 pairs: {GET /howto.html HTTP/1.1: null}{User-Agent: Java/1.6.0_20}{Host: www.rgagnon.com}{Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2}{Connection: keep-alive}
2010-08-07 00:00:31 sun.net.www.protocol.http.HttpURLConnection getInputStream
FIN: sun.net.www.MessageHeader@5ac0728 pairs: {null: HTTP/1.1 200 OK}{Date: Sat, 07 Aug 2010 04:00:33 GMT}{Server: Apache}{Accept-Ranges: bytes}{Content-Length: 17912}{Keep-Alive: timeout=5, max=64}{Connection: Keep-Alive}{Content-Type: text/html}

请注意,这仅打印没有正文的标题。

有关详细信息,请参见http://www.rgagnon.com/javadetails/java-debug-HttpURLConnection-problem.html

还有系统属性-Djavax.net.debug=all。但这主要是useful for SSL debugging

08-04 10:41