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
обновление Я изменил сторону сервера реализация для возврата другого кода состояния (303), и он работает сейчас (не бросая IOException). Это означает, что он конкретно связан с 412.
1 ответов
Внимание: это может зависеть от версии 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());
}
}
солнце.сеть.www.протокол.http.Исходный код HttpURLConnection в строке 1625:
мой тест на http://media.jarnbjo.de/412.php Использование:
Java (TM) SE среда выполнения (сборка 1.7.0_21-b11) Java HotSpot (TM) 64-разрядный сервер VM (сборка 23.21-b01, смешанный режим)
в Windows 64 бит