Kratki vodič za postavljanje zahtjeva s OkHttp

1. Uvod

Osnove OkHttp klijenta pokrivamo u našem Vodiču za OkHttp.

U ovom kratkom uputstvu posebno ćemo razmotriti različite vrste POST zahtjeva za verziju 3.x klijenta.

2. Osnovni POST

Možemo koristiti FormBody.Builder za izgradnju osnovnog RequestBody poslati dva parametra - Korisničko ime i zaporka - s POST zahtjevom:

@Test public void whenSendPostRequest_thenCorrect () baca IOException {RequestBody formBody = new FormBody.Builder () .add ("username", "test") .add ("password", "test") .build (); Zahtjev za zahtjevom = novi Request.Builder () .url (BASE_URL + "/ users") .post (formBody) .build (); Nazovite poziv = client.newCall (zahtjev); Odgovor odgovora = call.execute (); assertThat (response.code (), jednakTo (200)); }

3. POŠTA s autorizacijom

Ako želimo provjeriti autentičnost zahtjeva, možemo koristiti Vjerodajnice.osnovno graditelj za dodavanje vjerodajnica u zaglavlje.

U ovom jednostavnom primjeru poslat ćemo i Niz kao tijelo zahtjeva:

@Test public void whenSendPostRequestWithAuthorization_thenCorrect () baca IOException {String postBody = "test post"; Zahtjev za zahtjevom = novi Request.Builder () .url (URL_SECURED_BY_BASIC_AUTHENTICATION) .addHeader ("Autorizacija", Credentials.basic ("korisničko ime", "lozinka")). Post (RequestBody.create (MediaType.parse ("text / x- markdown), postBody)) .build (); Call call = client.newCall (zahtjev); Response response = call.execute (); assertThat (response.code (), jednakTo (200));}

4. OBJAVI s JSON-om

Da bismo poslali JSON u tijelo zahtjeva, moramo postaviti njegovu vrstu medija aplikacija / json. To možemo učiniti pomoću RequestBody.create graditelj:

@Test public void whenPostJson_thenCorrect () baca IOException {String json = "{\" id \ ": 1, \" name \ ": \" John \ "}"; RequestBody body = RequestBody.create (MediaType.parse ("application / json"), json); Zahtjev za zahtjevom = novi Request.Builder () .url (BASE_URL + "/ users / detail") .post (body) .build (); Nazovite poziv = client.newCall (zahtjev); Odgovor odgovora = call.execute (); assertThat (response.code (), jednakTo (200)); }

5. višedijelni POST zahtjev

Posljednji primjer koji ćemo pogledati je POST zahtjev za više dijelova. Moramo izgraditi svoje RequestBody kao MultipartBody za objavljivanje datoteke, korisničkog imena i lozinke:

@Test public void whenSendMultipartRequest_thenCorrect () baca IOException {RequestBody requestBody = new MultipartBody.Builder () .setType (MultipartBody.FORM) .addFormDataPart ("username", "test") .addFormDataPart ("password", test "," ("datoteka", "file.txt", RequestBody.create (MediaType.parse ("application / octet-stream"), nova datoteka ("src / test / resources / test.txt"))) .build (); Zahtjev za zahtjevom = novi Request.Builder () .url (BASE_URL + "/ users / multipart") .post (requestBody) .build (); Nazovite poziv = client.newCall (zahtjev); Odgovor odgovora = call.execute (); assertThat (response.code (), jednakTo (200)); } 

6. POST s ne-zadanim kodiranjem znakova

Zadano kodiranje znakova OkHttpa je UTF-8:

@Test public void whenPostJsonWithoutCharset_thenCharsetIsUtf8 () baca IOException {final String json = "{\" id \ ": 1, \" name \ ": \" John \ "}"; konačno tijelo RequestBody = RequestBody.create (MediaType.parse ("application / json"), json); Niz znakova = body.contentType (). Charset (). DisplayName (); assertThat (charset, jednakTo ("UTF-8")); }

Ako želimo koristiti drugačije kodiranje znakova, možemo ga proslijediti kao drugi parametar MediaType.parse ():

@Test public void whenPostJsonWithUtf16Charset_thenCharsetIsUtf16 () baca IOException {final String json = "{\" id \ ": 1, \" name \ ": \" John \ "}"; konačno tijelo RequestBody = RequestBody.create (MediaType.parse ("application / json; charset = utf-16"), json); Niz znakova = body.contentType (). Charset (). DisplayName (); assertThat (charset, jednakTo ("UTF-16")); }

7. Zaključak

U ovom kratkom članku vidjeli smo nekoliko primjera POST zahtjeva sa OkHttp klijent.

Kao i obično, primjeri koda dostupni su na GitHubu.


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