Guía de inicio rápido OkHttp enviar una solicitud POST

Nota del traductor: https: //www.baeldung.com/ artículo es una muy alta calidad de sitio de tecnología de Inglés, los estudiantes interesados ​​pueden ir a aprender de acceso.

1 Introducción

En este artículo se introducirá OkHttp uso básico del cliente.

En este breve artículo técnico, destacaremos una manera diferente OkHttp versión 3.x de correos para enviar la solicitud.

2 petición sustancialmente la POST

Podemos utilizar FormBody.Builder estructura básica requestBody , contiene dos parámetros: nombre de usuario, contraseña, envíe una solicitud 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 con una solicitud de autorización de POST

Si desea solicitar autenticación, puede utilizar el constructor Credentials.basic para agregar credenciales a la cabecera de la solicitud.

El código siguiente muestra un ejemplo de la transmisión de una serie de petición con el cuerpo autorizado de la secuencia:

@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));
}

el modo de transmisión de datos 4 de POST JSON

Con el fin de transmitir la solicitud JSON cuerpo, debe establecer el tipo de soporte archivo application / JSON . Podemos utilizar el constructor RequestBody.create de construcción:

@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 multiparte solicitud de POST

Para enviar una solicitud de varias partes Post, tenemos que RequestBody construido como un MultipartBody para publicar documentos, nombres de usuario y contraseñas solicitud POST:

@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 por defecto la codificación de caracteres sin enviar solicitud POST

Okhttp codificación de caracteres por defecto es 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"));
}

Si queremos usar otras codificaciones de caracteres, podemos utilizarlo como MediaType.parse () El segundo parámetro pasado:

@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 resumen

En este ensayo, damos algunos ejemplos de la utilización solicitud OkHttp la POST enviada por el cliente.

Como de costumbre, el código de ejemplo en este artículo ha sido publicado en GitHub sucesivamente.

Publicados 379 artículos originales · ganado elogios 862 · Vistas 1,32 millones +

Supongo que te gusta

Origin blog.csdn.net/w605283073/article/details/103797118
Recomendado
Clasificación