HttpClient 4 Cookbook

HttpClient 4 Cookbook

1. Vue d'ensemble

Ce livre de recettes montrehow to use the Apache HttpClient 4 dans une variété d'exemples et de cas d'utilisation.

L'accent est mis surHttpClient 4.3.x and above, donc certains des exemples peuvent ne pas fonctionner avec les anciennes versions de l'API.

Le format du livre de recettes est basé sur des exemples et pratique - aucun détail supplémentaire ni explication nécessaire.

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

2. Livre de recettes

créer le client http

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

envoyer une requête GET de base

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

obtenir le code d'état de la réponse HTTP

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

obtenir le type de média de la réponse

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

obtenir le corps de la réponse

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

configurer le timeout sur une requête

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

configurer le délai d'expiration sur l'ensemble du client

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

envoyer une requête POST

instance.execute(new HttpPost(SAMPLE_URL));

ajouter des paramètres à une demande

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

configurer la façon dont la redirection est gérée pour une requête HTTP

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

configurer les en-têtes pour une requête

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

obtenir les en-têtes de la réponse

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. Allez profondément dans HttpClient

La bibliothèque HttpClient est un outil assez puissant si elle est utilisée correctement - si vous voulez démarrerexploring what the client can do - consultez quelques-uns des didacticiels:

Vous pouvez égalementdig a lot deeper into the HttpClient en explorantthe entire series.

4. Conclusion

Ce format est un peu différent de la façon dont je structure habituellement mes articles -I’m publishing some of my internal development cookbooks sur un sujet donné - surGoogle Guava,Hamcrest etMockito - et maintenant HttpClient. L’objectif est d’avoir ces informations facilement accessibles en ligne et de les compléter chaque fois que je rencontre un nouvel exemple utile.

L'implémentation de tous ces exemples et extraits de codecan be found in over on GitHub.

Ceci est un projet basé sur Maven, il devrait donc être facile à importer et à exécuter tel quel.