Vodič za HttpAsyncClient

1. Pregled

U ovom uputstvu ilustrirat ćemo najčešće slučajeve upotrebe Apachea HttpAsyncClient - od osnovne upotrebe do načina na koji postaviti proxy, kako koristiti SSL certifikat i na kraju - kako ovjeriti s async klijentom.

2. Jednostavan primjer

Prvo - da vidimo kako koristiti HttpAsyncClient u jednostavnom primjeru - pošaljite GET zahtjev:

@Test public void whenUseHttpAsyncClient_thenCorrect () baca iznimku {CloseableHttpAsyncClient client = HttpAsyncClients.createDefault (); client.start (); HttpGet zahtjev = novi HttpGet ("// www.google.com"); Budućnost = client.execute (zahtjev, null); HttpResponse odgovor = future.get (); assertThat (response.getStatusLine (). getStatusCode (), jednakTo (200)); client.close (); }

Imajte na umu kako moramo početak async klijenta prije nego što ga upotrijebite; bez toga dobili bismo sljedeću iznimku:

java.lang.IllegalStateException: Zahtjev se ne može izvršiti; Status I / O reaktora: NEAKTIVNO na o.a.h.u.Asserts.check (Asserts.java:46) na o.a.h.i.n.c.CloseableHttpAsyncClientBase. osigurati pokretanje (CloseableHttpAsyncClientBase.java:90)

3. Višestruki navoj sa HttpAsyncClient

Sada - da vidimo kako koristiti HttpAsyncClient za istodobno izvršavanje više zahtjeva.

U sljedećem primjeru - šaljemo tri GET zahtjeva na tri različita domaćina pomoću HttpAsyncClient i SpajanjeNHttpClientConnectionManager:

@Test public void whenUseMultipleHttpAsyncClient_thenCorrect () baca iznimku {ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor (); PoolingNHttpClientConnectionManager cm = novo PoolingNHttpClientConnectionManager (ioReactor); CloseableHttpAsyncClient client = HttpAsyncClients.custom (). SetConnectionManager (cm) .build (); client.start (); String [] toGet = {"//www.google.com/", "//www.apache.org/", "//www.bing.com/"}; GetThread [] teme = novi GetThread [toGet.length]; for (int i = 0; i <thread.length; i ++) {HttpGet zahtjev = novi HttpGet (toGet [i]); niti [i] = novi GetThread (klijent, zahtjev); } za (nit GetThread: niti) {thread.start (); } za (nit GetThread: niti) {thread.join (); }}

Ovdje je naš GetThread implementacija za obradu odgovora:

statička klasa GetThread proširuje Thread {private CloseableHttpAsyncClient klijent; privatni kontekst HttpContext; privatni HttpGet zahtjev; javni GetThread (CloseableHttpAsyncClient klijent, HttpGet req) {this.client = client; context = HttpClientContext.create (); this.request = req; } @Override public void run () {try {Budućnost = client.execute (zahtjev, kontekst, null); HttpResponse odgovor = future.get (); assertThat (response.getStatusLine (). getStatusCode (), jednakTo (200)); } catch (Iznimka ex) {System.out.println (ex.getLocalizedMessage ()); }}}

4. Proxy s HttpAsyncClient

Dalje - pogledajmo kako postaviti i koristiti a opunomoćenik s HttpAsyncClient.

U sljedećem primjeru - šaljemo HTTP GET zahtjev preko proxyja:

@Test public void whenUseProxyWithHttpClient_thenCorrect () baca iznimku {CloseableHttpAsyncClient client = HttpAsyncClients.createDefault (); client.start (); HttpHost proxy = novi HttpHost ("74.50.126.248", 3127); RequestConfig config = RequestConfig.custom (). SetProxy (proxy) .build (); Zahtjev HttpGet = novi HttpGet ("// issues.apache.org/"); request.setConfig (config); Budućnost = client.execute (zahtjev, null); HttpResponse odgovor = future.get (); assertThat (response.getStatusLine (). getStatusCode (), jednakTo (200)); client.close (); }

5. SSL certifikat sa HttpAsyncClient

Sada - da vidimo kako koristiti a SSL certifikat s HttpAsyncClient.

U sljedećem primjeru - mi konfiguriramo HttpAsyncClient do prihvatiti sve potvrde:

@Test public void whenUseSSLWithHttpAsyncClient_thenCorrect () baca izuzetak {TrustStrategy accepttingTrustStrategy = new TrustStrategy () {public boolean isTrusted (X509Certificate [] certifikat, String authType) {return true; }}; SSLContext sslContext = SSLContexts.custom () .loadTrustMaterial (null, acceptTrustStrategy) .build (); CloseableHttpAsyncClient client = HttpAsyncClients.custom () .setSSLHostnameVerifier (SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER) .setSSLContext (sslContext) .build (); client.start (); Zahtjev za HttpGet = novi HttpGet ("// mms.nw.ru/"); Budućnost = client.execute (zahtjev, null); HttpResponse odgovor = future.get (); assertThat (response.getStatusLine (). getStatusCode (), jednakTo (200)); client.close (); }

6. Kolačići sa HttpAsyncClient

Dalje - da vidimo kako koristiti kolačiće s HttpAsyncClient.

U sljedećem primjeru - mi postavite vrijednost kolačića prije slanja zahtjeva:

@Test public void whenUseCookiesWithHttpAsyncClient_thenCorrect () baca izuzetak {BasicCookieStore cookieStore = new BasicCookieStore (); Kolačić BasicClientCookie = novi BasicClientCookie ("JSESSIONID", "1234"); cookie.setDomain (". github.com"); cookie.setPath ("/"); cookieStore.addCookie (kolačić); CloseableHttpAsyncClient client = HttpAsyncClients.custom (). Build (); client.start (); Zahtjev za HttpGet = novi HttpGet ("// www.github.com"); HttpContext localContext = novi BasicHttpContext (); localContext.setAttribute (HttpClientContext.COOKIE_STORE, cookieStore); Budućnost = client.execute (zahtjev, localContext, null); HttpResponse odgovor = future.get (); assertThat (response.getStatusLine (). getStatusCode (), jednakTo (200)); client.close (); }

7. Provjera autentičnosti pomoću HttpAsyncClienta

Dalje - pogledajmo kako koristiti autentifikaciju s HttpAsyncClient.

U sljedećem primjeru - koristimo CredentialsProvider za pristup hostu putem osnovne provjere autentičnosti:

@Test public void whenUseAuthenticationWithHttpAsyncClient_thenCorrect () baca iznimku {CredentialsProvider provider = new BasicCredentialsProvider (); UsernamePasswordCredentials creds = novi UsernamePasswordCredentials ("user", "pass"); provider.setCredentials (AuthScope.ANY, krediti); CloseableHttpAsyncClient client = HttpAsyncClients.custom (). SetDefaultCredentialsProvider (dobavljač) .build (); client.start (); Zahtjev za HttpGet = novi HttpGet ("// localhost: 8080"); Budućnost = client.execute (zahtjev, null); HttpResponse odgovor = future.get (); assertThat (response.getStatusLine (). getStatusCode (), jednakTo (200)); client.close (); }

8. Zaključak

U ovom smo članku ilustrirali različite slučajeve upotrebe asinkronog Apache Http klijenta.

Implementacija svih ovih primjera i isječaka koda mogu se naći u mom github projektu - ovo je projekt zasnovan na Eclipseu, pa bi ga trebalo lako uvesti i pokrenuti kakav jest.


$config[zx-auto] not found$config[zx-overlay] not found