Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:发送前显示HttpURLConnection的请求_Java_Request_Httpurlconnection - Fatal编程技术网

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"); 
}