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 기반 프로젝트이므로 그대로 가져오고 실행하기 쉬워야 합니다.

HTTPClient footer