Java:发送前显示HttpURLConnection的请求
我想使用Java:发送前显示HttpURLConnection的请求,java,request,httpurlconnection,Java,Request,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
HttpURLConnection
对服务器进行一些API调用。但请求未成功,返回:
<error>
<http_status>400 Bad Request</http_status>
<message>Unexpected request Content-Type header ''. Expecting 'application/x-www-form-urlencoded'.</message>
</error>
400错误请求
意外的请求内容类型标头“”。应为“application/x-www-form-urlencoded”。
所以我想检查发送到服务器的“真实”内容是什么。所谓真正的内容,我指的是确切的HTTP请求
你知道我怎么看这个吗
编辑:
根据这里的第一个答案,我应该澄清我的问题:我希望避免使用HTTP嗅探器之类的外部程序,我希望有一个函数或属性或任何保存我正在查找的信息的东西
如果不是这样,是否有人知道是否可以手动重建此信息(例如,通过调用几个函数,如getRequestMethod()等)
我经常面临这个问题,因此值得我自己努力构建这样的功能。只需要知道如何使用:)使用类似于tcpdump的东西,它可以转储计算机发出或接收的实际网络数据包。tcpdump可以工作,但很难让它实现您想要的功能。NetCat更加用户友好(以下是项目页面:-大多数Unix平台已经包括它)
这将侦听TCP端口9999,当HTTP客户端连接时,它将打印出请求的全文。您可以通过启用java.logging将HttpURLConnection置于调试模式
-Djava.util.logging.config.file=logging.properties
并在logging.properties(默认情况下在JRE_HOME\lib中)中放入以下属性
sun.net.www.protocol.http.HttpURLConnection.level = ALL
被接受的解决方案对我不起作用。但我们所做的是
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");
}
我真的不知道我和你上面提到的那行代码有什么关系。。我需要把这个放在哪里?(使用eclipse作为IDE)您还需要设置“java.util.logging.ConsoleHandler.level=FINEST”@Hirnhamster,在Run Configuration-Arguments选项卡中,添加到VM Arguments部分。您在哪里看到“real”发送数据的内容?我在JDK 7上尝试过它,在我改为
sun.net.www.protocol.http.HttpURLConnection.level=FINEST
后,它对我起到了作用
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");
}