HttpClient 4 - Egyéni sütik küldése

1. Áttekintés

Ez az oktatóanyag a következőkre fog összpontosítani hogyan lehet egyéni sütit küldeni az Apache HttpClient 4 használatával.

Ha mélyebbre akarsz ásni, és további jó dolgokat akarsz megtudni, amelyeket a HttpClient segítségével megtehetsz - lépj tovább a fő HttpClient oktatóanyagra.

2. Konfigurálja a Cookie-kezelést a HttpClient oldalon

2.1. HttpClient 4.3 után

Az újabb HttpClient 4.3-ban a folyékony építő API-t fogjuk kiaknázni, amely mind az ügyfél összeállításában, mind konfigurálásában felelős.

Először létre kell hoznunk egy sütitárolót, és be kell állítanunk a sütik mintáját:

BasicCookieStore cookieStore = új BasicCookieStore (); BasicClientCookie cookie = új BasicClientCookie ("JSESSIONID", "1234"); cookie.setDomain (". github.com"); cookie.setPath ("/"); cookieStore.addCookie (süti);

Azután, létrehozhatjuk ezt a cookie-boltot a HttpClient-en a setDefaultCookieStore () módszer és küldje el a kérést:

@Test public void whenSettingCookiesOnTheHttpClient_thenCookieSentCorrectly () dobja a ClientProtocolException, IOException {BasicCookieStore cookieStore = new BasicCookieStore (); BasicClientCookie cookie = új BasicClientCookie ("JSESSIONID", "1234"); cookie.setDomain (". github.com"); cookie.setPath ("/"); cookieStore.addCookie (süti); HttpClient kliens = HttpClientBuilder.create (). SetDefaultCookieStore (cookieStore) .build (); végső HttpGet kérés = új HttpGet ("// www.github.com"); válasz = kliens.végrehajtás (kérés); assertThat (response.getStatusLine (). getStatusCode (), equalTo (200)); }

Nagyon fontos elem a tartomány a sütire állítva - a megfelelő tartomány beállítása nélkül az ügyfél nem küldi el a cookie-t egyáltalán!

A használt verziótól függően előfordulhat, hogy be kell állítania:

cookie.setAttribute (ClientCookie.DOMAIN_ATTR, "true"); 

2.2. HttpClient 4.3 előtt

A HttpClient régebbi verzióival (4.3 előtt) - a sütitárolót közvetlenül a HttpClient:

@Test public void givenUsingDeprecatedApi_whenSettingCookiesOnTheHttpClient_thenCorrect () dobja a ClientProtocolException, IOException {BasicCookieStore cookieStore = new BasicCookieStore (); BasicClientCookie cookie = új BasicClientCookie ("JSESSIONID", "1234"); cookie.setDomain (". github.com"); cookie.setPath ("/"); cookieStore.addCookie (süti); DefaultHttpClient kliens = új DefaultHttpClient (); client.setCookieStore (cookieStore); HttpGet request = új HttpGet ("// www.github.com"); válasz = kliens.végrehajtás (kérés); assertThat (response.getStatusLine (). getStatusCode (), equalTo (200)); }

Az ügyfél felépítésén kívül nincs más különbség az előző példához képest.

3. Állítsa be a Cookie-t a Kérelemben

Ha a cookie beállítása a teljes HttpClient-re nem lehetséges, akkor a cookie-kat külön-külön konfigurálhatjuk a kérésekkel a HttpContext osztály:

@Test public void whenSettingCookiesOnTheRequest_thenCookieSentCorrectly () dobja a ClientProtocolException, IOException {BasicCookieStore cookieStore = new BasicCookieStore (); BasicClientCookie cookie = új BasicClientCookie ("JSESSIONID", "1234"); cookie.setDomain (". github.com"); cookie.setPath ("/"); cookieStore.addCookie (süti); instance = HttpClientBuilder.create (). build (); HttpGet request = új HttpGet ("// www.github.com"); HttpContext localContext = new BasicHttpContext (); localContext.setAttribute (HttpClientContext.COOKIE_STORE, cookieStore); // localContext.setAttribute (ClientContext.COOKIE_STORE, cookieStore); // 4.3 előtti válasz = instance.execute (request, localContext); assertThat (response.getStatusLine (). getStatusCode (), equalTo (200)); }

4. Állítsa be a Cookie-t az Alacsony szintű kérelemre

A cookie HTTP-kérelemre történő beállításának alacsony szintű alternatívája a nyers fejléc beállítása:

@Test public void whenSettingCookiesOnARequest_thenCorrect () dobja a ClientProtocolException, IOException {példány = HttpClientBuilder.create (). Build (); HttpGet request = új HttpGet ("// www.github.com"); request.setHeader ("Cookie", "JSESSIONID = 1234"); válasz = instance.execute (kérés); assertThat (response.getStatusLine (). getStatusCode (), equalTo (200)); }

Ez természetesen sokkal több hibára hajlamos, mint a beépített sütitámogatással dolgozni. Például vegye figyelembe, hogy ebben az esetben már nem állítjuk be a domaint - ami nem helyes.

5. Következtetés

Ez a cikk bemutatta, hogyan kell dolgozzon együtt a HttpClient céggel egy egyedi, felhasználó által vezérelt Cookie elküldéséhez.

Ne feledje, hogy ez nem azonos azzal, hogy hagyja, hogy a HttpClient foglalkozzon a szerver által beállított sütikkel. Ehelyett alacsony szinten manuálisan vezérli az ügyféloldalt.

Ezeknek a példáknak és kódrészleteknek a megvalósítása megtalálható a github projektemben.