1. 개요
이 기사에서는 다음 리디렉션을 중지하도록 Apache HttpClient를 구성하는 방법을 보여줍니다 .
기본적으로 HTTP 사양에 따라 HttpClient는 자동으로 리디렉션을 따릅니다 .
일부 사용 사례의 경우 완벽하게 괜찮을 수 있지만 바람직하지 않은 사용 사례가 분명히 있습니다. 이제 기본 동작을 변경하고 다음 리디렉션을 중지 하는 방법을 살펴보겠습니다 .
더 깊이 파고들고 HttpClient로 할 수 있는 다른 멋진 것들을 배우고 싶다면 메인 HttpClient 예제 로 넘어가십시오 .
2. 리디렉션을 따르지 마십시오.
2.1. HttpClient 4.3 이전
이전 버전의 Http 클라이언트(4.3 이전)에서는 다음과 같이 클라이언트가 리디렉션으로 수행하는 작업을 구성할 수 있습니다.
@Test
public void givenRedirectsAreDisabled_whenConsumingUrlWhichRedirects_thenNotRedirected()
throws ClientProtocolException, IOException {
DefaultHttpClient instance = new DefaultHttpClient();
HttpParams params = new BasicHttpParams();
params.setParameter(ClientPNames.HANDLE_REDIRECTS, false);
// HttpClientParams.setRedirecting(params, false); // alternative
HttpGet httpGet = new HttpGet("http://t.co/I5YYd9tddw");
httpGet.setParams(params);
CloseableHttpResponse response = instance.execute(httpGet);
assertThat(response.getStatusLine().getStatusCode(), equalTo(301));
}
실제 원시 http.protocol.handle-redirects 매개변수 설정을 사용하지 않고 리디렉션 동작을 구성하는 데 사용할 수 있는 대체 API에 주목하십시오 .
HttpClientParams.setRedirecting(params, false);
또한 팔로우 리디렉션이 비활성화된 상태에서 이제 Http 응답 상태 코드가 실제로 301 Moved Permanently 인지 확인할 수 있습니다.
2.2. HttpClient 4.3 이후
HttpClient 4.3 은 클라이언트를 구축하고 구성하기 위해 보다 깨끗하고 높은 수준의 API를 도입했습니다 .
@Test
public void givenRedirectsAreDisabled_whenConsumingUrlWhichRedirects_thenNotRedirected()
throws ClientProtocolException, IOException {
HttpClient instance = HttpClientBuilder.create().disableRedirectHandling().build();
HttpResponse response = instance.execute(new HttpGet("http://t.co/I5YYd9tddw"));
assertThat(response.getStatusLine().getStatusCode(), equalTo(301));
}
새 API는 개별 요청뿐만 아니라 이 리디렉션 동작으로 전체 클라이언트를 구성합니다.
3. 결론
이 빠른 사용방법(예제)에서는 HTTP 리디렉션을 자동으로 따르지 않도록 Apache HttpClient( 4.3 이전 버전 과 이후 버전 모두)를 구성하는 방법을 설명했습니다.
이 모든 예제와 코드 스니펫의 구현은 내 github 프로젝트 에서 찾을 수 있습니다. 이것은 Eclipse 기반 프로젝트이므로 그대로 가져오고 실행하기 쉬워야 합니다.