当代码已知时,HttpURLConnection.getResponseCode()会抛出IOException异常
即使状态已知,HttpURLConnection.getResponseCode()
如何抛出IOException
?当代码已知时,HttpURLConnection.getResponseCode()会抛出IOException异常
Caused by: java.io.IOException: Server returned HTTP response code: 412 for URL: <my url>
这不是获取响应代码的问题,因为它是写入异常消息中的。
我希望有一个选项可以得到状态码(即使它不是〜200)而不会发生异常,所以我可以在我的代码中决定要做什么。
完整堆栈跟踪:
Caused by: java.io.IOException: Server returned HTTP response code: 412 for URL: <my url>
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1625)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
... my code
UPDATE 我改变了服务器端实现返回不同的状态代码(303),和它的工作现在(不扔IOException异常)。这意味着它特别与412相关。
注意:这可能取决于您正在运行的JVM版本!作为@SotiriosDelimanolis的试验给出不同的结果
答案是在HttpURLConnection类的源代码并且与所有具有错误代码> 400
如果错误码等于404或410一个FileNotFoundException异常错误是抛出别的一个IOException作为
if (respCode >= 400) {
if (respCode == 404 || respCode == 410) {
throw new FileNotFoundException(url.toString());
} else {
throw new java.io.IOException("Server returned HTTP" +
" response code: " + respCode + " for URL: " +
url.toString());
}
}
sun.net.www.protocol.http.HttpURLConnection源代码在行1625:
我上http://media.jarnbjo.de/412.php试验使用:
的Java(TM)SE运行时环境(建立1.7.0_21-B11) 爪哇热点(TM)64位服务器VM(建立23.21-B01,混合模式)
在Windows 64位
我们已经检查过在之前已被删除的答案。这不应该发生。你可以自己测试一下。 –
这取决于你使用的sdk ...这是来自openjdk 7.你在做什么jdk测试? –
这不是我要告诉你的。使用'HttpURLConnection'向http://media.jarnbjo.de/412.php发送HTTP GET请求。你不会得到一个例外。您将获得412状态码。 –
你检查什么是错的可能与服务器? http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_Error – Smutje
你是什么意思?服务器正常工作并按预期返回412。我希望能够从连接中获取状态码,而不会引发异常。 – danieln
我无法回答原因,但考虑使用更复杂的HTTP客户端。 –