1. введение
Мы рассмотрим основы OkHttp клиента в нашем Руководстве по OkHttp .
В этом коротком уроке мы специально рассмотрим различные типы POST-запросов для версии 3.x клиента.
2. Основной ПОСТ
Мы можем использовать FormBody.Builder to build a basic RequestBody to send two parameters – username and password – with a POST request:
@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. ПОСТ с авторизацией
Если мы хотим аутентифицировать запрос, мы можем использовать Credentials.basic builder для добавления учетных данных в заголовок.
В этом простом примере мы также отправим 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. СООБЩЕНИЕ с JSON
Чтобы отправить JSON в теле запроса, мы должны установить его тип носителя application/json . Мы можем сделать это с помощью RequestBody.create builder:
@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 multipart request. Нам нужно построить ваше Тело запроса как Составное тело для размещения файла, имени пользователя и пароля:
@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. СООБЩЕНИЕ с нестандартной кодировкой символов
Ok http кодировка символов по умолчанию-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 .