En hurtig guide til indlæg af anmodninger med OkHttp

1. Introduktion

Vi dækker det grundlæggende i OkHttp-klienten i vores guide til OkHttp.

I denne korte vejledning ser vi specifikt på forskellige typer POST-anmodninger om klientens version 3.x.

2. Grundlæggende POST

Vi kan bruge FormBody.Builder at bygge en grundlæggende RequestBody at sende to parametre - brugernavn og adgangskode - med en POST-anmodning:

@Test offentlig ugyldig nårSendPostRequest_thenCorrect () kaster IOException {RequestBody formBody = ny FormBody.Builder () .add ("brugernavn", "test") .add ("password", "test") .build (); Anmodningsanmodning = ny Request.Builder () .url (BASE_URL + "/ brugere") .post (formBody) .build (); Call call = client.newCall (anmodning); Svarrespons = call.execute (); assertThat (respons.code (), equalTo (200)); }

3. POST med autorisation

Hvis vi vil godkende anmodningen, kan vi bruge Credentials.basic bygherre for at tilføje legitimationsoplysninger til overskriften.

I dette enkle eksempel sender vi også en Snor som anmodningens organ:

@Test offentlig ugyldig nårSendPostRequestWithAuthorization_thenCorrect () kaster 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 (anmodning); Response response = call.execute (); assertThat (response.code (), equalTo (200));}

4. POST med JSON

For at sende JSON i anmodningsorganet er vi nødt til at indstille dets medietype ansøgning / json. Vi kan gøre det ved hjælp af RequestBody.create Bygger:

@Test offentligt ugyldigt nårPostJson_thenCorrect () kaster IOException {String json = "{\" id \ ": 1, \" name \ ": \" John \ "}"; RequestBody body = RequestBody.create (MediaType.parse ("application / json"), json); Anmodningsanmodning = ny Request.Builder () .url (BASE_URL + "/ brugere / detaljer") .post (body) .build (); Call call = client.newCall (anmodning); Svarrespons = call.execute (); assertThat (respons.code (), equalTo (200)); }

5. Multipart POST-anmodning

Det sidste eksempel, vi vil se på, er en POST-anmodning om flere dele. Vi er nødt til at bygge vores RequestBody som en MultipartBody at sende en fil, et brugernavn og en adgangskode:

@Test offentlig ugyldig nårSendMultipartRequest_thenCorrect () kaster IOException {RequestBody requestBody = ny MultipartBody.Builder () .setType (MultipartBody.FORM) .addFormDataPart ("brugernavn", "test") .addFormDataPart ("password", "test data.") ("file", "file.txt", RequestBody.create (MediaType.parse ("application / octet-stream"), ny fil ("src / test / resources / test.txt"))) .build (); Anmodningsanmodning = ny Request.Builder () .url (BASE_URL + "/ brugere / multipart") .post (requestBody) .build (); Call call = client.newCall (anmodning); Svarrespons = call.execute (); assertThat (respons.code (), equalTo (200)); } 

6. POST med ikke-standardtegnkodning

OkHttps standardtegnkodning er UTF-8:

@Test offentlig ugyldig nårPostJsonWithoutCharset_thenCharsetIsUtf8 () kaster IOException {final String json = "{\" id \ ": 1, \" name \ ": \" John \ "}"; endelig RequestBody body = RequestBody.create (MediaType.parse ("application / json"), json); String charset = body.contentType (). Charset (). DisplayName (); assertThat (charset, equalTo ("UTF-8")); }

Hvis vi vil bruge en anden tegnkodning, kan vi sende den som den anden parameter for MediaType.parse ():

@Test offentlig ugyldig, nårPostJsonWithUtf16Charset_thenCharsetIsUtf16 () kaster IOException {final String json = "{\" id \ ": 1, \" name \ ": \" John \ "}"; endelig RequestBody body = RequestBody.create (MediaType.parse ("application / json; charset = utf-16"), json); String charset = body.contentType (). Charset (). DisplayName (); assertThat (charset, equalTo ("UTF-16")); }

7. Konklusion

I denne korte artikel så vi flere eksempler på POST-anmodninger med OkHttp klient.

Som sædvanligt er kodeeksemplerne tilgængelige på GitHub.