HttpClient 4 - odoslanie vlastného súboru cookie

1. Prehľad

Tento návod sa zameria na ako poslať vlastný súbor cookie pomocou servera Apache HttpClient 4.

Ak sa chcete prehĺbiť a naučiť sa ďalšie super veci, ktoré môžete robiť s HttpClient, choďte ďalej k hlavnému výukovému programu HttpClient.

2. Nakonfigurujte správu cookies na HttpClient

2.1. HttpClient po 4.3

V novšej HttpClient 4.3 budeme využívať plynulé rozhranie API staviteľa zodpovedné za konštrukciu aj konfiguráciu klienta.

Najskôr si musíme vytvoriť obchod cookie a nastaviť náš vzorový cookie v obchode:

BasicCookieStore cookieStore = nový BasicCookieStore (); BasicClientCookie cookie = nový BasicClientCookie ("JSESSIONID", "1234"); cookie.setDomain (". github.com"); cookie.setPath ("/"); cookieStore.addCookie (cookie);

Potom, môžeme nastaviť tento obchod s cookies na HttpClient pomocou setDefaultCookieStore () metóda a pošlite žiadosť:

@Test public void whenSettingCookiesOnTheHttpClient_thenCookieSentCorrectly () vyvolá ClientProtocolException, IOException {BasicCookieStore cookieStore = nový BasicCookieStore (); BasicClientCookie cookie = nový BasicClientCookie ("JSESSIONID", "1234"); cookie.setDomain (". github.com"); cookie.setPath ("/"); cookieStore.addCookie (cookie); HttpClient client = HttpClientBuilder.create (). SetDefaultCookieStore (cookieStore) .build (); konečná požiadavka HttpGet = nový HttpGet ("// www.github.com"); response = client.execute (request); assertThat (response.getStatusLine (). getStatusCode (), equalTo (200)); }

Veľmi dôležitým prvkom je doména je nastavený na cookie - bez nastavenia správnej domény klient neodošle cookie vôbec!

V závislosti od presnej verzie, ktorú používate, možno budete musieť nastaviť:

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

2.2. HttpClient Pred 4.3

So staršími verziami HttpClient (pred 4.3) - bol súbor cookie nastavený priamo na serveri HttpClient:

@Test public void givenUsingDeprecatedApi_whenSettingCookiesOnTheHttpClient_thenCorrect () vyvolá ClientProtocolException, IOException {BasicCookieStore cookieStore = nový BasicCookieStore (); BasicClientCookie cookie = nový BasicClientCookie ("JSESSIONID", "1234"); cookie.setDomain (". github.com"); cookie.setPath ("/"); cookieStore.addCookie (cookie); DefaultHttpClient klient = nový DefaultHttpClient (); client.setCookieStore (cookieStore); HttpGet request = nový HttpGet ("// www.github.com"); response = client.execute (request); assertThat (response.getStatusLine (). getStatusCode (), equalTo (200)); }

Okrem spôsobu vytvorenia klienta nie je v porovnaní s predchádzajúcim príkladom žiadny iný rozdiel.

3. Nastavte Cookie na požiadanie

Ak nastavenie súboru cookie na celom serveri HttpClient nie je možné, môžeme konfigurovať požiadavky pomocou súboru cookie individuálne pomocou HttpContext trieda:

@Test public void whenSettingCookiesOnTheRequest_thenCookieSentCorrectly () vyvolá ClientProtocolException, IOException {BasicCookieStore cookieStore = nový BasicCookieStore (); BasicClientCookie cookie = nový BasicClientCookie ("JSESSIONID", "1234"); cookie.setDomain (". github.com"); cookie.setPath ("/"); cookieStore.addCookie (cookie); instance = HttpClientBuilder.create (). build (); HttpGet request = nový HttpGet ("// www.github.com"); HttpContext localContext = nový BasicHttpContext (); localContext.setAttribute (HttpClientContext.COOKIE_STORE, cookieStore); // localContext.setAttribute (ClientContext.COOKIE_STORE, cookieStore); // pred 4.3 response = instance.execute (request, localContext); assertThat (response.getStatusLine (). getStatusCode (), equalTo (200)); }

4. Nastavte cookie na požiadavku na nízkej úrovni

Nízkoúrovňovou alternatívou nastavenia súboru cookie na požiadavke HTTP by bolo jeho nastavenie ako nespracovaného hlavičky:

@ Test public void whenSettingCookiesOnARequest_thenCorrect () vyvolá ClientProtocolException, IOException {instance = HttpClientBuilder.create (). Build (); HttpGet request = nový HttpGet ("// www.github.com"); request.setHeader ("Cookie", "JSESSIONID = 1234"); response = instance.execute (požiadavka); assertThat (response.getStatusLine (). getStatusCode (), equalTo (200)); }

To je samozrejme oveľa viac náchylné na chyby ako práca so zabudovanou podporou súborov cookie. Napríklad si všimnite, že v tomto prípade už doménu nenastavujeme - čo nie je správne.

5. Záver

Tento článok ilustroval, ako na to spolupracujte s HttpClient na odoslaní vlastného, ​​používateľom ovládaného súboru cookie.

Všimnite si, že to nie je to isté ako nechať HttpClient narábať s cookies nastavenými serverom. Namiesto toho je to manuálne riadenie klientskej strany na nízkej úrovni.

Implementáciu všetkých týchto príkladov a útržkov kódu nájdete v mojom projekte github.


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