HttpClient 4 - Não siga redirecionamentos
1. Visão geral
Neste artigo, vou mostrar comoconfigure the Apache HttpClient 4 to stop following redirects.
Por padrão, seguindo a especificação HTTP,the HttpClient will automatically follow redirects.
Para alguns casos de uso, isso pode ser perfeitamente adequado, mas certamente existem casos de uso em que isso não é desejado - e agora veremos como alterar esse comportamento padrão estop following redirects.
Se você quiser se aprofundar e aprender outras coisas legais que você pode fazer com o HttpClient - vá parathe main HttpClient tutorial.
2. Não siga redirecionamentos
2.1. Antes do HttpClient 4.3
Nas versões mais antigas do cliente Http (antes da versão 4.3), podemos configurar o que o cliente faz com os redirecionamentos da seguinte maneira:
@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));
}
Observe a API alternativa que pode ser usada para configurar o comportamento de redirecionamentowithout using setting the actual raw http.protocol.handle-redirects parameter:
HttpClientParams.setRedirecting(params, false);
Observe também que, com os redirecionamentos de seguimento desabilitados, podemos verificar se o código de status da Resposta Http é realmente301 Moved Permanently - como deveria ser.
2.2. Após HttpClient 4.3
HttpClient 4.3 introduced a cleaner, more high level API para construir e configurar o cliente:
@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));
}
Observe que a nova API configura o cliente inteiro com esse comportamento de redirecionamento - não apenas a solicitação individual.
3. Conclusão
Este tutorial rápido cobriu como configurar o Apache HttpClient - tanto pré4.3e pós - para evitar que siga redirecionamentos HTTP automaticamente.
A implementação de todos esses exemplos e fragmentos de códigocan be found in my github project - este é um projeto baseado no Eclipse, portanto, deve ser fácil de importar e executar como está.