Почему HttpURLConnection.getResponseCode() выдает IOException?

Я вижу, что метод getResponseCode() - это просто метод получения, который возвращает statusCode, уже установленный действием соединения, которое произошло ранее.

Итак, в этом контексте, почему он выдает IOException?
Я что-то упустил?


person vivek_jonam    schedule 02.05.2013    source источник


Ответы (1)


Из javadoc:

Он вернет 200 и 401 соответственно. Возвращает -1, если в ответе невозможно различить код (т. е. ответ не является допустимым HTTP).

Возвращает: код состояния HTTP или -1.

Выдает: IOException — если произошла ошибка при подключении к серверу.

Это означает, что если код еще не известен (еще не запрошен на сервере), соединения открываются и соединение выполняется (в этот момент может возникнуть IOException).

Если мы посмотрим на исходный код, мы имеем:

public int getResponseCode() throws IOException {
    /*
     * We're got the response code already
     */
    if (responseCode != -1) {
        return responseCode;
    }

    /*
     * Ensure that we have connected to the server. Record
     * exception as we need to re-throw it if there isn't
     * a status line.
     */
    Exception exc = null;
    try {
        getInputStream();
    } catch (Exception e) {
        exc = e;
    }

    /*
     * If we can't a status-line then re-throw any exception
     * that getInputStream threw.
     */
    String statusLine = getHeaderField(0);
    if (statusLine == null) {
        if (exc != null) {
            if (exc instanceof RuntimeException)
                throw (RuntimeException)exc;
            else
                throw (IOException)exc;
        }
        return -1;
    }
    ...
person Francisco Spaeth    schedule 02.05.2013