HttpClient 4 - Ne pas suivre les redirections

HttpClient 4 - Ne suivez pas les redirections

1. Vue d'ensemble

Dans cet article, je vais montrer commentconfigure the Apache HttpClient 4 to stop following redirects.

Par défaut, suivant les spécifications HTTP,the HttpClient will automatically follow redirects.

Pour certains cas d’utilisation, cela peut être tout à fait correct, mais il y a certainement des cas d’utilisation où cela n’est pas souhaité - et nous allons maintenant voir comment modifier ce comportement par défaut et lesstop following redirects.

Si vous voulez approfondir et apprendre d'autres choses intéressantes que vous pouvez faire avec HttpClient, rendez-vous surthe main HttpClient tutorial.

2. Ne pas suivre les redirections

2.1. Avant HttpClient 4.3

Dans les anciennes versions du client HTTP (avant la version 4.3), nous pouvons configurer ce que le client fait avec les redirections comme suit:

@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));
}

Notez l'API alternative qui peut être utilisée pour configurer le comportement de redirectionwithout using setting the actual raw http.protocol.handle-redirects parameter:

HttpClientParams.setRedirecting(params, false);

Notez également que, avec les redirections de suivi désactivées, nous pouvons maintenant vérifier que le code d'état de la réponse Http est bien301 Moved Permanently - comme il se doit.

2.2. Après HttpClient 4.3

HttpClient 4.3 introduced a cleaner, more high level API pour construire et configurer le client:

@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));
}

Notez que la nouvelle API configure l'ensemble du client avec ce comportement de redirection, et pas seulement la requête individuelle.

3. Conclusion

Ce tutoriel rapide a expliqué comment configurer Apache HttpClient - à la fois avant4.3 et post - pour l'empêcher de suivre automatiquement les redirections HTTP.

L'implémentation de tous ces exemples et extraits de codecan be found in my github project - il s'agit d'un projet basé sur Eclipse, il devrait donc être facile à importer et à exécuter tel quel.