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.