HttpClient 4 - Umleitungen nicht folgen

1. Überblick

In diesem Artikel werde ich zeigen, wie Sie den Apache HttpClient 4 so konfigurieren können, dass er den Weiterleitungen nicht mehr folgt.

Nach der HTTP-Spezifikation folgt der HttpClient standardmäßig automatisch den Umleitungen ** .

Für einige Anwendungsfälle mag das vollkommen in Ordnung sein, aber es gibt sicherlich Anwendungsfälle, bei denen dies nicht erwünscht ist - und wir werden nun untersuchen, wie man dieses Standardverhalten ändert und den Umleitungen nicht mehr folgen .

Wenn Sie tiefer graben und andere coole Dinge lernen möchten, können Sie dies mit dem HttpClient tun - gehen Sie zu dem wichtigsten HttpClient-Tutorial .

2. Umleitungen nicht folgen

2.1. Vor dem HttpClient 4.3

In älteren Versionen des Http-Clients (vor 4.3) können Sie wie folgt konfigurieren, was der Client mit Weiterleitungen macht:

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

Beachten Sie die alternative API, die zum Konfigurieren des Umleitungsverhaltens verwendet werden kann, ohne dass der tatsächliche unformatierte http.protocol.handle-redirects -Parameter festgelegt wird:

HttpClientParams.setRedirecting(params, false);

Beachten Sie außerdem, dass bei deaktivierten Weiterleitungen jetzt überprüft werden kann, ob der Statuscode für die HTTP-Antwort tatsächlich 301 dauerhaft verschoben ist, wie es sein sollte.

2.2. Nach HttpClient 4.3

  • Mit HttpClient 4.3 wurde eine saubere API auf höherer Ebene eingeführt ** , um den Client zu erstellen und zu konfigurieren:

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

Beachten Sie, dass die neue API den gesamten Client mit diesem Umleitungsverhalten konfiguriert, nicht nur die einzelne Anforderung.

3. Fazit

In diesem kurzen Tutorial wurde beschrieben, wie Sie den Apache HttpClient - sowohl vor 4.3 als auch nach dem Post - konfigurieren, um zu verhindern, dass HTTP-Weiterleitungen automatisch folgen.

Die Implementierung all dieser Beispiele und Code-Snippets finden Sie in my github project - Dies ist ein Eclipse-basiertes Projekt Seien Sie einfach zu importieren und auszuführen, wie es ist.