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.