HttpAsyncClient-vejledning
1. Oversigt
I denne vejledning illustrerer vi de mest almindelige brugssager af Apache HttpAsyncClient - fra grundlæggende brug, til hvordan man gør oprette en proxy, hvordan man bruger SSL-certifikat og endelig - hvordan godkende med async-klienten. Først - lad os se, hvordan du bruger HttpAsyncClient i et simpelt eksempel - send en GET-anmodning: Bemærk hvordan vi er nødt til Start async-klienten, inden du bruger den; uden det ville vi få følgende undtagelse: Lad os nu se, hvordan du bruger HttpAsyncClient at udføre flere anmodninger samtidigt. I det følgende eksempel sender vi tre GET-anmodninger til tre forskellige værter ved hjælp af HttpAsyncClient og PoolingNHttpClientConnectionManager: Her er vores GetThread implementering for at håndtere svaret: Dernæst - lad os se, hvordan man opsætter og bruger en fuldmagt med HttpAsyncClient. I det følgende eksempel sender vi en HTTP FÅ anmodning via proxy: Lad os nu se, hvordan man bruger en SSL-certifikat med HttpAsyncClient. I det følgende eksempel konfigurerer vi HttpAsyncClient til accepter alle certifikater: Næste - lad os se, hvordan du bruger cookies med HttpAsyncClient. I det følgende eksempel - vi indstil en cookieværdi, inden anmodningen sendes: Næste - lad os se, hvordan du bruger godkendelse med HttpAsyncClient. I det følgende eksempel bruger vi CredentialsProvider for at få adgang til en vært gennem grundlæggende godkendelse: I denne artikel illustrerede vi de forskellige brugssager for den asynkrone Apache Http-klient. Implementeringen af alle disse eksempler og kodestykker kan findes i mit github-projekt - dette er et Eclipse-baseret projekt, så det skal være let at importere og køre som det er.2. Enkelt eksempel
@Test offentlig ugyldig nårUseHttpAsyncClient_thenCorrect () kaster undtagelse {CloseableHttpAsyncClient client = HttpAsyncClients.createDefault (); client.start (); HttpGet anmodning = ny HttpGet ("// www.google.com"); Fremtidig fremtid = klient. Udfør (anmodning, null); HttpResponse respons = future.get (); assertThat (respons.getStatusLine (). getStatusCode (), equalTo (200)); client.close (); }
java.lang.IllegalStateException: Anmodning kan ikke udføres; I / O-reaktorstatus: INAKTIV ved o.a.h.u.Asserts.check (Asserts.java:46) ved o.a.h.i.n.c.CloseableHttpAsyncClientBase. sikreRunning (CloseableHttpAsyncClientBase.java:90)
3. Multitrådning med HttpAsyncClient
@Test offentlig ugyldig nårUseMultipleHttpAsyncClient_thenCorrect () kaster Undtagelse {ConnectingIOReactor ioReactor = ny DefaultConnectingIOReactor (); PoolingNHttpClientConnectionManager cm = ny PoolingNHttpClientConnectionManager (ioReactor); CloseableHttpAsyncClient-klient = HttpAsyncClients.custom (). SetConnectionManager (cm) .build (); client.start (); Streng [] toGet = {"//www.google.com/", "//www.apache.org/", "//www.bing.com/"}; GetThread [] threads = ny GetThread [toGet.length]; for (int i = 0; i <threads.length; i ++) {HttpGet anmodning = ny HttpGet (toGet [i]); tråde [i] = ny GetThread (klient, anmodning); } for (GetThread-tråd: tråde) {thread.start (); } for (GetThread-tråd: tråde) {thread.join (); }}
statisk klasse GetThread udvider tråd {privat CloseableHttpAsyncClient-klient; privat HttpContext-kontekst; privat HttpGet anmodning; offentlig GetThread (CloseableHttpAsyncClient-klient, HttpGet req) {this.client = klient; kontekst = HttpClientContext.create (); this.request = req; } @ Override public void run () {prøv {Future future = client.execute (anmodning, kontekst, null); HttpResponse respons = future.get (); assertThat (respons.getStatusLine (). getStatusCode (), equalTo (200)); } fange (Undtagelse ex) {System.out.println (ex.getLocalizedMessage ()); }}}
4. Proxy med HttpAsyncClient
@Test offentlig ugyldig nårUseProxyWithHttpClient_thenCorrect () kaster Undtagelse {CloseableHttpAsyncClient-klient = HttpAsyncClients.createDefault (); client.start (); HttpHost proxy = ny HttpHost ("74.50.126.248", 3127); RequestConfig config = RequestConfig.custom (). SetProxy (proxy) .build (); HttpGet-anmodning = ny HttpGet ("// issues.apache.org/"); request.setConfig (config); Fremtidig fremtid = klient. Udfør (anmodning, null); HttpResponse respons = future.get (); assertThat (respons.getStatusLine (). getStatusCode (), equalTo (200)); client.close (); }
5. SSL-certifikat med HttpAsyncClient
@Test offentlig ugyldig nårUseSSLWithHttpAsyncClient_thenCorrect () kaster undtagelse {TrustStrategy acceptingTrustStrategy = ny TrustStrategy () {public boolean isTrusted (X509Certificate [] certifikat, String authType) {return true; }}; SSLContext sslContext = SSLContexts.custom () .loadTrustMaterial (null, acceptingTrustStrategy) .build (); CloseableHttpAsyncClient client = HttpAsyncClients.custom () .setSSLHostnameVerifier (SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER) .setSSLContext (sslContext) .build (); client.start (); HttpGet anmodning = ny HttpGet ("// mms.nw.ru/"); Fremtidig fremtid = klient. Udfør (anmodning, null); HttpResponse respons = future.get (); assertThat (respons.getStatusLine (). getStatusCode (), equalTo (200)); client.close (); }
6. Cookies med HttpAsyncClient
@Test offentlig ugyldigt nårUseCookiesWithHttpAsyncClient_thenCorrect () kaster Undtagelse {BasicCookieStore cookieStore = ny BasicCookieStore (); BasicClientCookie cookie = ny BasicClientCookie ("JSESSIONID", "1234"); cookie.setDomain (". github.com"); cookie.setPath ("/"); cookieStore.addCookie (cookie); CloseableHttpAsyncClient-klient = HttpAsyncClients.custom (). Build (); client.start (); HttpGet anmodning = ny HttpGet ("// www.github.com"); HttpContext localContext = ny BasicHttpContext (); localContext.setAttribute (HttpClientContext.COOKIE_STORE, cookieStore); Fremtidig fremtid = klient. Udfør (anmodning, localContext, null); HttpResponse respons = future.get (); assertThat (respons.getStatusLine (). getStatusCode (), equalTo (200)); client.close (); }
7. Godkendelse med HttpAsyncClient
@Test offentlig ugyldigt nårUseAuthenticationWithHttpAsyncClient_thenCorrect () kaster Undtagelse {CredentialsProvider provider = new BasicCredentialsProvider (); UsernamePasswordCredentials creds = nyt brugernavnPasswordCredentials ("bruger", "pass"); provider.setCredentials (AuthScope.ANY, creds); CloseableHttpAsyncClient client = HttpAsyncClients.custom (). SetDefaultCredentialsProvider (provider) .build (); client.start (); HttpGet anmodning = ny HttpGet ("// localhost: 8080"); Fremtidig fremtid = klient. Udfør (anmodning, null); HttpResponse respons = future.get (); assertThat (respons.getStatusLine (). getStatusCode (), equalTo (200)); client.close (); }
8. Konklusion