如何在Java中找出400 Http错误的细节?

时间:2011-07-30 23:13:42

标签: java

尝试连接网站时遇到400错误。

如何设置连接以显示服务器拒绝我的原因?

try {
doc = Jsoup.connect(URL).timeout(10 * 30000).get();
} catch (IOException ioe) {
System.out.println("Error:" + ioe);
}

http://jsoup.org/apidocs/org/jsoup/Connection.html

2 个答案:

答案 0 :(得分:3)

HTTP 400是“错误请求”。这可能是服务器的问题,但它可能 您的代码中的问题。调试这些内容的最佳方法不依赖于您使用的语言:只需嗅探网络流量即可查看您的HTTP请求的外观。您还可以查看服务器的回复,看看它是否提供了更多信息。通常服务器相当模糊,原因有两个。

  • 编写HTTP服务器的人并没有着手帮助人们调试HTTP客户端,
  • 过于具体的错误代码可能会导致安全问题。

为了嗅探HTTP流量,我使用了Wireshark;查尔斯也有作品,还有很多其他作品。

(如果您只是想显示服务器出错的原因,只需像其他任何一样显示HTTP响应。)

编辑:代码很好,但我们确实需要查看HTTP请求本身才能弄清楚它有什么问题。获取Wireshark或Charles,或将客户端指向将请求转储到文件的套接字。

答案 1 :(得分:0)

400表示请求is malformed

  

由于语法格式错误,服务器无法理解该请求。客户不应该在没有修改的情况下重复请求。

从根本上说,您需要做的是正确地形成请求。例如,如果您要发送请求参数并且通常使用不常见的编码,请确保它们都正确URI-encoded

  

如何设置连接以显示服务器拒绝我的原因?

通常,回复的主体将包含更多细节。并非总是如此,这不是必需的,但它可以提供对请求被视为“格式错误”的原因的深入了解。如果回复的主体不包含此信息,那么除了查看您发送的请求以确定其被视为格式错误的原因之外别无他法。