HttpClient 4 kookboek

1. Overzicht

Dit kookboek laat zien hoe u de Apache HttpClient gebruikt 4 in een verscheidenheid aan voorbeelden en use-cases.

De nadruk ligt op HttpClient 4.3.x en hoger, dus sommige voorbeelden werken mogelijk niet met de oudere versies van de API.

Het formaat van het kookboek is voorbeeldgericht en praktisch - geen externe details en uitleg nodig.

Als je dieper wilt graven en andere coole dingen wilt leren die je kunt doen met de HttpClient - ga dan naar de belangrijkste HttpClient-zelfstudie.

2. Kookboek

maak de http-client

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

stuur een basis GET-verzoek

instance.execute (nieuwe HttpGet ("// www.google.com"));

verkrijg de statuscode van de HTTP-reactie

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

verkrijg het mediatype van het antwoord

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

de kern van het antwoord opvragen

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

configureer de time-out op een verzoek

@Test (verwacht = SocketTimeoutException.class) public void givenLowTimeout_whenExecutingRequestWithTimeout_thenException () gooit ClientProtocolException, IOException {RequestConfig requestConfig = RequestConfig.custom () .setConnectionRequestTimeout (1000) .setConnectionRequestTimeout (1000). HttpGet request = nieuwe HttpGet (SAMPLE_URL); request.setConfig (requestConfig); instance.execute (verzoek); }

configureer een time-out voor de hele client

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

stuur een POST-verzoek

instance.execute (nieuwe HttpPost (SAMPLE_URL));

parameters toevoegen aan een verzoek

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

configureer hoe omleidingen worden afgehandeld voor een HTTP-verzoek

CloseableHttpClient-instantie = HttpClientBuilder.create (). DisableRedirectHandling (). Build (); CloseableHttpResponse response = instance.execute (nieuwe HttpGet ("// t.co/I5YYd9tddw")); assertThat (response.getStatusLine (). getStatusCode (), equalTo (301));

configureer de headers voor een verzoek

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

haal de kopteksten uit het antwoord

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

bronnen sluiten / vrijgeven

response = instance.execute (nieuwe HttpGet (SAMPLE_URL)); probeer {HttpEntity entity = response.getEntity (); if (entiteit! = null) {InputStream instream = entity.getContent (); instream.close (); }} eindelijk {response.close (); }

3. Ga diep in HttpClient

De HttpClient-bibliotheek is een behoorlijk krachtig hulpmiddel als het correct wordt gebruikt - als u wilt beginnen onderzoeken wat de cliënt kan doen - bekijk enkele van de tutorials:

  • HttpClient 4 - Haal de statuscode op
  • HttpClient - Stel aangepaste koptekst in

Je kan ook graaf veel dieper in de HttpClient door de hele serie te verkennen.

4. Conclusie

Dit formaat is een beetje anders dan hoe ik mijn artikelen gewoonlijk structureer - Ik publiceer enkele van mijn kookboeken voor interne ontwikkeling over een bepaald onderwerp - op Google Guava, Hamcrest en Mockito - en nu HttpClient. Het doel is om deze informatie direct online beschikbaar te hebben - en om er iets aan toe te voegen wanneer ik een nieuw bruikbaar voorbeeld tegenkom.

De implementatie van al deze voorbeelden en codefragmenten is te vinden in meer dan op GitHub.

Dit is een op Maven gebaseerd project, dus het zou gemakkelijk moeten kunnen worden geïmporteerd en uitgevoerd zoals het is.