Een beknopte handleiding voor het plaatsen van verzoeken met OkHttp

1. Inleiding

We behandelen de basisprincipes van de OkHttp-client in onze Gids voor OkHttp.

In deze korte tutorial kijken we specifiek naar verschillende soorten POST-verzoeken voor versie 3.x van de client.

2. Basis POST

We kunnen gebruiken FormBody.Builder om een ​​basis te bouwen RequestBody om twee parameters te verzenden - gebruikersnaam en wachtwoord - met een POST-verzoek:

@Test public void whenSendPostRequest_thenCorrect () gooit IOException {RequestBody formBody = new FormBody.Builder () .add ("gebruikersnaam", "test") .add ("wachtwoord", "test") .build (); Request request = nieuwe Request.Builder () .url (BASE_URL + "/ gebruikers") .post (formBody) .build (); Call call = client.newCall (verzoek); Antwoordantwoord = call.execute (); assertThat (response.code (), equalTo (200)); }

3. POST met autorisatie

Als we het verzoek willen authenticeren, kunnen we de Credentials.basic builder om referenties toe te voegen aan de header.

In dit eenvoudige voorbeeld sturen we ook een Draad als hoofdtekst van het verzoek:

@Test openbare leegte whenSendPostRequestWithAuthorization_thenCorrect () gooit IOException {String postBody = "testpost"; Request request = nieuwe Request.Builder () .url (URL_SECURED_BY_BASIC_AUTHENTICATION) .addHeader ("Autorisatie", Credentials.basic ("gebruikersnaam", "wachtwoord")) .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 met JSON

Om JSON in de hoofdtekst van het verzoek te verzenden, moeten we het mediatype instellen applicatie / json. We kunnen dat doen met behulp van de RequestBody.create bouwer:

@Test public void whenPostJson_thenCorrect () gooit IOException {String json = "{\" id \ ": 1, \" naam \ ": \" John \ "}"; RequestBody body = RequestBody.create (MediaType.parse ("application / json"), json); Request request = nieuwe Request.Builder () .url (BASE_URL + "/ gebruikers / detail") .post (body) .build (); Call call = client.newCall (verzoek); Antwoordantwoord = call.execute (); assertThat (response.code (), equalTo (200)); }

5. Meerdelige POST-aanvraag

Het laatste voorbeeld dat we zullen bekijken, is een POST-multipart-verzoek. We moeten ons bouwen RequestBody als een Meerdelig lichaam om een ​​bestand, een gebruikersnaam en een wachtwoord te plaatsen:

@Test public void whenSendMultipartRequest_thenCorrect () gooit IOException {RequestBody requestBody = nieuw MultipartBody.Builder () .setType (MultipartBody.FORM) .addFormDataPart ("gebruikersnaam", "test") .addFormDataPart ("wachtwoord", "test"). ("file", "file.txt", RequestBody.create (MediaType.parse ("application / octet-stream"), nieuw bestand ("src / test / resources / test.txt"))) .build (); Request request = nieuwe Request.Builder () .url (BASE_URL + "/ gebruikers / multipart") .post (requestBody) .build (); Call call = client.newCall (verzoek); Antwoordantwoord = call.execute (); assertThat (response.code (), equalTo (200)); } 

6. POST met niet-standaard tekencodering

De standaard tekencodering van OkHttp is UTF-8:

@Test public void whenPostJsonWithoutCharset_thenCharsetIsUtf8 () gooit 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")); }

Als we een andere tekencodering willen gebruiken, kunnen we deze doorgeven als de tweede parameter van de MediaType.parse ():

@Test public void whenPostJsonWithUtf16Charset_thenCharsetIsUtf16 () gooit IOException {final String json = "{\" id \ ": 1, \" naam \ ": \" 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. Conclusie

In dit korte artikel hebben we verschillende voorbeelden gezien van POST-verzoeken met de OkHttp cliënt.

Zoals gewoonlijk zijn de codevoorbeelden beschikbaar op GitHub.