HttpClient 4 - Pošaljite prilagođeni kolačić

1. Pregled

Ovaj vodič bit će usredotočen na kako poslati prilagođeni kolačić pomoću Apache HttpClient 4.

Ako želite dublje kopati i naučiti druge cool stvari koje možete učiniti s HttpClientom - krenite prema glavnom vodiču HttpClienta.

2. Konfigurirajte upravljanje kolačićima na HttpClientu

2.1. HttpClient Nakon 4.3

U novijem HttpClient 4.3, koristit ćemo tečni API graditelja odgovoran za konstruiranje i konfiguriranje klijenta.

Prvo ćemo morati stvoriti trgovinu kolačića i postaviti naš uzorak kolačića u trgovini:

BasicCookieStore cookieStore = novo BasicCookieStore (); Kolačić BasicClientCookie = novi BasicClientCookie ("JSESSIONID", "1234"); cookie.setDomain (". github.com"); cookie.setPath ("/"); cookieStore.addCookie (kolačić);

Zatim, ovu trgovinu kolačića možemo postaviti na HttpClientu pomoću setDefaultCookieStore () metoda i pošaljite zahtjev:

@Test public void whenSettingCookiesOnTheHttpClient_thenCookieSentCorrect () baca ClientProtocolException, IOException {BasicCookieStore cookieStore = new BasicCookieStore (); Kolačić BasicClientCookie = novi BasicClientCookie ("JSESSIONID", "1234"); cookie.setDomain (". github.com"); cookie.setPath ("/"); cookieStore.addCookie (kolačić); HttpClient klijent = HttpClientBuilder.create (). SetDefaultCookieStore (cookieStore) .build (); konačni HttpGet zahtjev = novi HttpGet ("// www.github.com"); odgovor = klijent.izvršiti (zahtjev); assertThat (response.getStatusLine (). getStatusCode (), jednakTo (200)); }

Vrlo važan element je domena postavlja se na kolačić - bez postavljanja odgovarajuće domene, klijent neće poslati kolačić uopće!

Također, ovisno o točnoj verziji koju koristite, možda ćete trebati postaviti i:

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

2.2. HttpClient prije 4.3

Sa starijim verzijama HttpClienta (prije 4.3) - trgovina kolačićima postavljena je izravno na HttpClient:

@Test javna praznina givenUsingDeprecatedApi_whenSettingCookiesOnTheHttpClient_thenCorrect () baca ClientProtocolException, IOException {BasicCookieStore cookieStore = new BasicCookieStore (); Kolačić BasicClientCookie = novi BasicClientCookie ("JSESSIONID", "1234"); cookie.setDomain (". github.com"); cookie.setPath ("/"); cookieStore.addCookie (kolačić); DefaultHttpClient klijent = novi DefaultHttpClient (); client.setCookieStore (cookieStore); Zahtjev za HttpGet = novi HttpGet ("// www.github.com"); odgovor = klijent.izvršiti (zahtjev); assertThat (response.getStatusLine (). getStatusCode (), jednakTo (200)); }

Osim načina gradnje klijenta, nema druge razlike u odnosu na prethodni primjer.

3. Postavite kolačić na zahtjev

Ako postavljanje kolačića na cijelom HttpClientu nije opcija, možemo konfigurirati zahtjeve s kolačićem pojedinačno koristeći HttpContext razred:

@Test public void whenSettingCookiesOnTheRequest_thenCookieSentCorrect () baca ClientProtocolException, IOException {BasicCookieStore cookieStore = new BasicCookieStore (); Kolačić BasicClientCookie = novi BasicClientCookie ("JSESSIONID", "1234"); cookie.setDomain (". github.com"); cookie.setPath ("/"); cookieStore.addCookie (kolačić); instanca = HttpClientBuilder.create (). build (); Zahtjev za HttpGet = novi HttpGet ("// www.github.com"); HttpContext localContext = novi BasicHttpContext (); localContext.setAttribute (HttpClientContext.COOKIE_STORE, cookieStore); // localContext.setAttribute (ClientContext.COOKIE_STORE, cookieStore); // prije 4.3 odgovor = instance.execute (zahtjev, localContext); assertThat (response.getStatusLine (). getStatusCode (), jednakTo (200)); }

4. Postavite kolačić na zahtjev za nisku razinu

Alternativa niske razine postavljanja kolačića na HTTP zahtjev bila bi postavljanje kao neobrađeno zaglavlje:

@Test public void whenSettingCookiesOnARequest_thenCorrect () baca ClientProtocolException, IOException {instance = HttpClientBuilder.create (). Build (); Zahtjev za HttpGet = novi HttpGet ("// www.github.com"); request.setHeader ("Kolačić", "JSESSIONID = 1234"); odgovor = instance.execute (zahtjev); assertThat (response.getStatusLine (). getStatusCode (), jednakTo (200)); }

Ovo je naravno puno više skloni pogreškama nego rad s ugrađenom podrškom za kolačiće. Na primjer, primijetite da u ovom slučaju više ne postavljamo domenu - što nije točno.

5. Zaključak

Ovaj je članak ilustrirao kako radite s HttpClientom kako biste poslali prilagođeni cookie koji kontrolira korisnik.

Imajte na umu da to nije isto kao dopuštanje HttpClientu da se bavi kolačićima koje je postavio poslužitelj. Umjesto toga, ručno kontrolira klijentsku stranu na niskoj razini.

Implementacija svih ovih primjera i isječaka koda mogu se naći u mom github projektu.


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