Мы поддерживаем проект, который в настоящее время выполняется на 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?