У меня есть несколько автоматических тестов, которые используют HttpURLConnection для реализации RESTful API.HttpURLConnection.getResponseCode не подбирает HTTP-код ответа 206
Часть моего кода (ниже) утверждает, что ответ возвращает определенный код ответа HTTP. Я ожидаю HTTP 206 Response, но getResponseCode всегда возвращает 200. Однако, если я ударил url напрямую с помощью curl, я получаю «HTTP/1.1 206 Partial Content», как и ожидалось.
URL requestURL = new URL(url);
HttpURLConnection connection = (HttpURLConnection) requestURL.openConnection();
try {
connection.setRequestProperty("Connection", "close");
connection.setReadTimeout(5000);
assertEquals("Request successfully handled",
expectedResponseCode,
connection.getResponseCode());
InputStream input = connection.getInputStream();
try {
return toString(input);
} finally {
input.close();
}
} finally {
connection.disconnect();
}
Любые идеи о том, почему это происходит и как получить поведение, которое я хочу?
Да, кто бы это сделал. Рад, что ты понял это! – kentcdodds
Код ответа находится в первой строке ответа HTTP. Если вы пишете достаточно контента для буферов потока, которые нужно очистить, значит, часть ответа будет отправлена обратно клиенту - тогда уже слишком поздно устанавливать код ответа. Очевидно, завиток делал запросы по-другому, чем ваш код, и как-то заставлял буферизацию вести себя по-другому. Не видя ничего другого, я бы предположил, что это может быть связано с Content-Encoding. –
Если код для установки кода состояния работал слишком поздно, то это же относится к настройке полей заголовка. –