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

我试图连接到网站时遇到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

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

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

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

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

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

400表示请求格式错误 :

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

从根本上说,您需要做的是正确地形成请求。 例如,如果您要发送请求参数和通常的exception编码,请确保它们都是正确的URI编码 。

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

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