Java 8 HttpUrlConnection не в состоянии проанализировать ответ с протоколом http 2 - PullRequest
2 голосов
/ 25 июня 2019

Мы поддерживаем проект, который в настоящее время выполняется на Java 8. Теперь мы должны вызвать партнерский сервер через его API для переноса некоторых данных в нашу базу данных.

Когда мы вызываем их сервер, мы получили исключение:

Причина: org.apache.http.ProtocolException: серверу не удалось ответить с действительным ответом HTTP

Код ответа в этом случае -1. ​​

Итак, я пытаюсь использовать curl для получения данных с их сервера, я увидел, что строка их ответа имеет вид:

HTTP / 2 200

ХотяПроверка HttpURLConnection выглядит следующим образом:

    if (statusLine.startsWith("HTTP/1.")) {
        int codePos = statusLine.indexOf(' ');
        if (codePos > 0) {

            int phrasePos = statusLine.indexOf(' ', codePos+1);
            if (phrasePos > 0 && phrasePos < statusLine.length()) {
                responseMessage = statusLine.substring(phrasePos+1);
            }

            // deviation from RFC 2616 - don't reject status line
            // if SP Reason-Phrase is not included.
            if (phrasePos < 0)
                phrasePos = statusLine.length();

            try {
                responseCode = Integer.parseInt
                        (statusLine.substring(codePos+1, phrasePos));
                return responseCode;
            } catch (NumberFormatException e) { }
        }
    }
    return -1;

Поскольку строка состояния здесь 2, а не 1., она не может прочитать и проанализировать ответ от сервера.

Но мы не можем просто обновить нашу Java до более высокой версии, так как она потребует много испытаний, чтобы убедиться, что ничего не сломалось, кто-нибудь знает, как это исправить в Java 8?

1 Ответ

5 голосов
/ 25 июня 2019

Можете ли вы использовать HttpClient 5.0 ? Это поддерживает HTTP / 2 на Java 7 и выше (обратите внимание, что я несколько удивлен, что ваш партнерский сервис не поддерживает переход на HTTP / 1.x в какой-то форме?)

...