HttpURLConnection을 사용하여 RESTful API를 사용하는 자동화 된 테스트가 있습니다.HttpURLConnection.getResponseCode가 HTTP 응답 코드 206을 수신하지 않습니다.
내 코드 부분 (아래)은 응답이 특정 HTTP 응답 코드를 반환한다고 주장합니다. HTTP 206 응답을 기대하고 있지만 getResponseCode는 항상 200을 반환합니다. 그러나 내가 컬을 사용하여 URL을 직접 친다면 예상대로 '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 응답의 첫 번째 줄에 있습니다. 스트림 버퍼가 플러시되도록 충분한 내용을 작성하면 (즉, 응답의 일부가 클라이언트로 다시 전송 됨) 응답 코드를 설정하기에는 너무 늦습니다. 분명히 컬이 당신의 코드와 다른 방식으로 요청을하고 있었고 어떻게 든 버퍼링이 다르게 행동하게 만들었습니다. 다른 것을 보지 않고서는 컨텐츠 인코딩과 관련 될 수 있다고 추측합니다. –
상태 코드를 설정하는 코드가 너무 늦게 실행 된 경우 헤더 필드를 설정하는 경우에도 동일하게 적용해야합니다. –