HttpClient 4 Kochbuch

HttpClient 4 Kochbuch

1. Überblick

Dieses Kochbuch zeigthow to use the Apache HttpClient 4 in einer Vielzahl von Beispielen und Anwendungsfällen.

Der Fokus liegt aufHttpClient 4.3.x and above, daher funktionieren einige Beispiele möglicherweise nicht mit den älteren Versionen der API.

Das Format des Kochbuchs ist beispielorientiert und praktisch - keine überflüssigen Details und Erklärungen erforderlich.

Wenn Sie tiefer graben und andere coole Dinge lernen möchten, die Sie mit dem HttpClient tun können, gehen Sie zuthe main HttpClient tutorial.

2. Kochbuch

Erstellen Sie den http-Client

CloseableHttpClient client = HttpClientBuilder.create().build();

Senden Sie eine grundlegende GET-Anfrage

instance.execute(new HttpGet("http://www.google.com"));

Rufen Sie den Statuscode der HTTP-Antwort ab

CloseableHttpResponse response = instance.execute(new HttpGet("http://www.google.com"));
assertThat(response.getStatusLine().getStatusCode(), equalTo(200));

Rufen Sie den Medientyp der Antwort ab

CloseableHttpResponse response = instance.execute(new HttpGet("http://www.google.com"));
String contentMimeType = ContentType.getOrDefault(response.getEntity()).getMimeType();
assertThat(contentMimeType, equalTo(ContentType.TEXT_HTML.getMimeType()));

Holen Sie sich den Körper der Antwort

CloseableHttpResponse response = instance.execute(new HttpGet("http://www.google.com"));
String bodyAsString = EntityUtils.toString(response.getEntity());
assertThat(bodyAsString, notNullValue());

Konfigurieren Sie das Zeitlimit für eine Anforderung

@Test(expected = SocketTimeoutException.class)
public void givenLowTimeout_whenExecutingRequestWithTimeout_thenException()
    throws ClientProtocolException, IOException {
    RequestConfig requestConfig = RequestConfig.custom()
      .setConnectionRequestTimeout(1000).setConnectTimeout(1000).setSocketTimeout(1000).build();
    HttpGet request = new HttpGet(SAMPLE_URL);
    request.setConfig(requestConfig);
    instance.execute(request);
}

Konfigurieren Sie das Zeitlimit auf dem gesamten Client

RequestConfig requestConfig = RequestConfig.custom().
    setConnectionRequestTimeout(1000).setConnectTimeout(1000).setSocketTimeout(1000).build();
HttpClientBuilder builder = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig);

Senden Sie eine POST-Anfrage

instance.execute(new HttpPost(SAMPLE_URL));

Fügen Sie einer Anfrage Parameter hinzu

List params = new ArrayList();
params.add(new BasicNameValuePair("key1", "value1"));
params.add(new BasicNameValuePair("key2", "value2"));
request.setEntity(new UrlEncodedFormEntity(params, Consts.UTF_8));

Konfigurieren Sie, wie die Umleitung für eine HTTP-Anforderung behandelt wird

CloseableHttpClient instance = HttpClientBuilder.create().disableRedirectHandling().build();
CloseableHttpResponse response = instance.execute(new HttpGet("http://t.co/I5YYd9tddw"));
assertThat(response.getStatusLine().getStatusCode(), equalTo(301));

Konfigurieren Sie die Header für eine Anforderung

HttpGet request = new HttpGet(SAMPLE_URL);
request.addHeader(HttpHeaders.ACCEPT, "application/xml");
response = instance.execute(request);

Holen Sie sich die Header aus der Antwort

CloseableHttpResponse response = instance.execute(new HttpGet(SAMPLE_URL));
Header[] headers = response.getHeaders(HttpHeaders.CONTENT_TYPE);
assertThat(headers, not(emptyArray()));

close/release resources

response = instance.execute(new HttpGet(SAMPLE_URL));
try {
    HttpEntity entity = response.getEntity();
    if (entity != null) {
        InputStream instream = entity.getContent();
        instream.close();
    }
} finally {
    response.close();
}

3. Gehen Sie tief in HttpClient

Die HttpClient-Bibliothek ist bei korrekter Verwendung ein ziemlich leistungsfähiges Tool. Wenn Sieexploring what the client can do starten möchten, lesen Sie einige der Tutorials:

Sie können auchdig a lot deeper into the HttpClient durch Erkunden vonthe entire series.

4. Fazit

Dieses Format unterscheidet sich ein wenig von der Art und Weise, wie ich meine Artikel normalerweise strukturiere -I’m publishing some of my internal development cookbooks zu einem bestimmten Thema - aufGoogle Guava,Hamcrest undMockito - und jetzt HttpClient. Das Ziel ist es, diese Informationen online verfügbar zu machen - und sie zu ergänzen, wenn ich auf ein neues nützliches Beispiel stoße.

Die Implementierung all dieser Beispiele und Codefragmentecan be found in over on GitHub.

Dies ist ein Maven-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein.