Eine Kurzanleitung zum Posten von Anfragen mit OkHttp

1. Einleitung

Wir behandeln die Grundlagen des OkHttp-Clients in unserem Handbuch zu OkHttp.

In diesem kurzen Tutorial werden wir uns speziell mit verschiedenen Arten von POST-Anforderungen für Version 3.x des Clients befassen.

2. Grundlegender POST

Wir können FormBody.Builder verwenden , um einen grundlegenden RequestBody zu erstellen , um zwei Parameter - Benutzername und Passwort - mit einer POST-Anfrage zu senden :

@Test public void whenSendPostRequest_thenCorrect() throws IOException { RequestBody formBody = new FormBody.Builder() .add("username", "test") .add("password", "test") .build(); Request request = new Request.Builder() .url(BASE_URL + "/users") .post(formBody) .build(); Call call = client.newCall(request); Response response = call.execute(); assertThat(response.code(), equalTo(200)); }

3. POST mit Autorisierung

Wenn wir die Anforderung authentifizieren möchten, können wir den Builder Credentials.basic verwenden , um dem Header Anmeldeinformationen hinzuzufügen.

In diesem einfachen Beispiel senden wir auch einen String als Hauptteil der Anforderung:

@Test public void whenSendPostRequestWithAuthorization_thenCorrect() throws 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 mit JSON

Um JSON im Anforderungshauptteil zu senden, müssen Sie den Medientyp application / json festlegen . Wir können dies mit dem Builder RequestBody.create tun :

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

5. Mehrteilige POST-Anfrage

Das letzte Beispiel, das wir uns ansehen werden, ist eine mehrteilige POST-Anforderung. Wir müssen unseren RequestBody als MultipartBody erstellen, um eine Datei, einen Benutzernamen und ein Passwort zu veröffentlichen:

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

6. POST mit nicht standardmäßiger Zeichenkodierung

Die Standard-Zeichencodierung von OkHttp lautet UTF-8:

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

Wenn wir eine andere Zeichenkodierung verwenden möchten, können wir sie als zweiten Parameter von MediaType.parse () übergeben :

@Test public void whenPostJsonWithUtf16Charset_thenCharsetIsUtf16() throws 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. Fazit

In diesem kurzen Artikel haben wir einige Beispiele für POST-Anforderungen mit dem OkHttp- Client gesehen.

Wie üblich sind die Codebeispiele auf GitHub verfügbar.