Stručný sprievodca pre odosielanie žiadostí pomocou OkHttp

1. Úvod

Základy klienta OkHttp uvádzame v našom Sprievodcovi okHttp.

V tomto krátkom tutoriáli sa pozrieme konkrétne na rôzne typy požiadaviek POST pre verziu 3.x klienta.

2. Základný POST

Môžeme použiť FormBody.Builder vybudovať zákl RequestBody poslať dva parametre - používateľské meno a heslo - s požiadavkou POST:

@Test public void whenSendPostRequest_thenCorrect () hodí IOException {RequestBody formBody = new FormBody.Builder () .add ("používateľské meno", "test") .add ("heslo", "test") .build (); Vyžiadanie požiadavky = nový Request.Builder () .url (BASE_URL + "/ users") .post (formBody) .build (); Volať hovor = client.newCall (požiadavka); Odozva odpoveď = call.execute (); assertThat (response.code (), equalTo (200)); }

3. POST s autorizáciou

Ak chceme overiť požiadavku, môžeme použiť Poverenia.základné nástroj na pridanie poverení do hlavičky.

V tomto jednoduchom príklade pošleme aj a String ako telo žiadosti:

@Test public void whenSendPostRequestWithAuthorization_thenCorrect () vyvolá IOException {String postBody = "test post"; Request request = new Request.Builder () .url (URL_SECURED_BY_BASIC_AUTHENTICATION) .addHeader ("Authorization", Credentials.basic ("username", "password")) .post (RequestBody.create (MediaType.parse ("text / x-) markdown), postBody)) .build (); Call call = client.newCall (request); Response response = call.execute (); assertThat (response.code (), equalTo (200));}

4. POST s JSON

Aby sme mohli poslať JSON do tela žiadosti, musíme nastaviť jeho typ média aplikácia / json. Môžeme to urobiť pomocou RequestBody.create staviteľ:

@ Test public void whenPostJson_thenCorrect () vyvolá IOException {String json = "{\" id \ ": 1, \" name \ ": \" John \ "}"; RequestBody body = RequestBody.create (MediaType.parse ("application / json"), json); Request request = nový Request.Builder () .url (BASE_URL + "/ users / detail") .post (body) .build (); Volať hovor = client.newCall (požiadavka); Odozva odpoveď = call.execute (); assertThat (response.code (), equalTo (200)); }

5. Požiadavka na viacdielny POST

Posledným príkladom, na ktorý sa pozrieme, je POST požiadavka na viac častí. Musíme si vybudovať našu RequestBody ako MultipartBody ak chcete zverejniť súbor, používateľské meno a heslo:

@Test public void whenSendMultipartRequest_thenCorrect () throws IOException {RequestBody requestBody = new MultipartBody.Builder () .setType (MultipartBody.FORM) .addFormDataPart ("username", "test") .addFormDataPart ("password", "test", "test") ("file", "file.txt", RequestBody.create (MediaType.parse ("application / octet-stream"), new File ("src / test / resources / test.txt"))) .build (); Request request = nový Request.Builder () .url (BASE_URL + "/ users / multipart") .post (requestBody) .build (); Volať hovor = client.newCall (požiadavka); Odozva odpoveď = call.execute (); assertThat (response.code (), equalTo (200)); } 

6. POST s predvoleným kódovaním znakov

Predvolené kódovanie znakov OkHttp je UTF-8:

@ Test public void whenPostJsonWithoutCharset_thenCharsetIsUtf8 () vyvolá IOException {final String json = "{\" id \ ": 1, \" name \ ": \" John \ "}"; final RequestBody body = RequestBody.create (MediaType.parse ("application / json"), json); Reťazec charset = body.contentType (). Charset (). DisplayName (); assertThat (charset, equalTo ("UTF-8")); }

Ak chceme použiť iné kódovanie znakov, môžeme ho odovzdať ako druhý parameter parametra MediaType.parse ():

@ Test public void whenPostJsonWithUtf16Charset_thenCharsetIsUtf16 () vyvolá IOException {final String json = "{\" id \ ": 1, \" name \ ": \" John \ "}"; final RequestBody body = RequestBody.create (MediaType.parse ("application / json; charset = utf-16"), json); Reťazec charset = body.contentType (). Charset (). DisplayName (); assertThat (charset, equalTo ("UTF-16")); }

7. Záver

V tomto krátkom článku sme videli niekoľko príkladov požiadaviek POST s OkHttp zákazník.

Ako obvykle sú príklady kódov k dispozícii na GitHub.