En rask guide til innleggsforespørsler med OkHttp

1. Introduksjon

Vi dekker det grunnleggende om OkHttp-klienten i vår guide til OkHttp.

I denne korte opplæringen vil vi se spesifikt på forskjellige typer POST-forespørsler for versjon 3.x av klienten.

2. Grunnleggende POST

Vi kan bruke FormBody.Builder å bygge en grunnleggende RequestBody å sende to parametere - brukernavn og passord - med en POST-forespørsel:

@Test offentlig ugyldig nårSendPostRequest_thenCorrect () kaster IOException {RequestBody formBody = ny FormBody.Builder () .add ("brukernavn", "test") .add ("passord", "test") .build (); Be om forespørsel = ny Request.Builder () .url (BASE_URL + "/ brukere") .post (formBody) .build (); Call call = client.newCall (forespørsel); Svarrespons = call.execute (); assertThat (respons.code (), equalTo (200)); }

3. POST med autorisasjon

Hvis vi vil autentisere forespørselen, kan vi bruke Referanser. Grunnleggende byggherre for å legge til påloggingsinformasjon i overskriften.

I dette enkle eksemplet sender vi også en String som selve anmodningen:

@Test offentlig ugyldig nårSendPostRequestWithAuthorization_thenCorrect () kaster IOException {String postBody = "test post"; Be om forespørsel = ny forespørsel.Bygger () .url (URL_SECURED_BY_BASIC_AUTHENTICATION) .addHeader ("Autorisasjon", Credentials.basic ("brukernavn", "passord")). Post (RequestBody.create (MediaType.parse ("tekst / x-) markdown), postBody)) .build (); Call call = client.newCall (request); Response response = call.execute (); assertThat (response.code (), equalTo (200));}

4. POST med JSON

For å sende JSON i forespørselen, må vi angi medietypen søknad / json. Vi kan gjøre det ved hjelp av RequestBody.create bygger:

@Test offentlig ugyldig når PostJson_thenCorrect () kaster IOException {String json = "{\" id \ ": 1, \" name \ ": \" John \ "}"; RequestBody body = RequestBody.create (MediaType.parse ("application / json"), json); Forespørsel forespørsel = ny Request.Builder () .url (BASE_URL + "/ brukere / detalj") .post (body) .build (); Call call = client.newCall (forespørsel); Svarrespons = call.execute (); assertThat (respons.code (), equalTo (200)); }

5. Multipart POST-forespørsel

Det siste eksemplet vi vil se på er en POST-forespørsel om flere deler. Vi må bygge vårt RequestBody som en MultipartBody for å legge ut en fil, et brukernavn og et passord:

@Test offentlig ugyldig nårSendMultipartRequest_thenCorrect () kaster IOException {RequestBody requestBody = ny MultipartBody.Builder () .setType (MultipartBody.FORM) .addFormDataPart ("brukernavn", "test") .addFormDataPart ("passord", "testata. Testdata)." ("file", "file.txt", RequestBody.create (MediaType.parse ("application / octet-stream"), new File ("src / test / resources / test.txt"))) .build (); Be forespørsel = ny Request.Builder () .url (BASE_URL + "/ brukere / multipart") .post (requestBody) .build (); Call call = client.newCall (forespørsel); Svarrespons = call.execute (); assertThat (respons.code (), equalTo (200)); } 

6. POST med ikke-standard tegnkoding

OkHttps standard tegnkoding er UTF-8:

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

Hvis vi vil bruke en annen tegnkoding, kan vi sende den som den andre parameteren for MediaType.parse ():

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

7. Konklusjon

I denne korte artikkelen så vi flere eksempler på POST-forespørsler med OkHttp klient.

Som vanlig er kodeeksemplene tilgjengelig på GitHub.


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