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://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7u40-b43/sun/net/www/protocol/http/HttpURLConnection.java#HttpURLConnection

мой тест на http://media.jarnbjo.de/412.php Использование:

Java (TM) SE среда выполнения (сборка 1.7.0_21-b11) Java HotSpot (TM) 64-разрядный сервер VM (сборка 23.21-b01, смешанный режим)

в Windows 64 бит

enter image description here