Кратко ръководство за публикуване на заявки с OkHttp

1. Въведение

Ние обхващаме основите на клиента OkHttp в нашето Ръководство за OkHttp.

В този кратък урок ще разгледаме конкретно различните видове POST заявки за версия 3.x на клиента.

2. Основен POST

Можем да използваме FormBody.Builder, за да изградим основен RequestBody за изпращане на два параметъра - потребителско име и парола - с POST заявка:

@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 с оторизация

Ако искаме да удостоверим заявката, можем да използваме конструктора Credentials.basic , за да добавим идентификационни данни към заглавката.

В този прост пример ще изпратим и String като тяло на заявката:

@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 с JSON

За да изпратим JSON в тялото на заявката, трябва да зададем неговия тип медия application / json . Можем да направим това с помощта на конструктора RequestBody.create :

@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. Заявка за POST с много части

Последният пример, който ще разгледаме, е POST заявка от няколко части. Ние трябва да изградим RequestBody като MultipartBody да публикувате файл, потребителско име и парола:

@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 с кодиране на символи, които не са по подразбиране

Кодирането на символите по подразбиране на OkHttp е 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")); }

Ако искаме да използваме различно кодиране на символи, можем да го предадем като втори параметър на MediaType.parse () :

@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. Заключение

В тази кратка статия видяхме няколко примера за POST заявки с клиента OkHttp .

Както обикновено, примерите за кодове са достъпни в GitHub.