Рубрики
Без рубрики

Краткое руководство по размещению запросов с помощью OkHttp

Узнайте о различных функциях OkHttp для почтовых запросов.

Автор оригинала: baeldung.

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 .