Nota do Tradutor: https: artigo //www.baeldung.com/ é uma qualidade muito elevada do local de tecnologia de Inglês, os alunos interessados podem ir para a aprendizagem de acesso.
1 Introdução
Este artigo irá apresentar OkHttp uso básico do cliente.
Neste breve artigo técnico, vamos destacar uma maneira diferente OkHttp 3.x versão Publicar para enviar o pedido.
2 substancialmente pedido POST
Podemos usar FormBody.Builder estrutura básica requestBody , contém dois parâmetros: nome de usuário, senha, envie um pedido 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 com uma autorização de pedido POST
Se você quiser autenticação pedido, você pode usar o construtor Credentials.basic para adicionar credenciais para o cabeçalho do pedido.
O código a seguir mostra um exemplo de transmitir uma seqüência de solicitação com o corpo autorizado Cordas:
@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));
}
modo de transmissão de dados 4 POST JSON
Para transmitir o JSON pedido corpo, ele deve definir o tipo de mídia aplicação arquivo / JSON . Podemos usar o construtor RequestBody.create para construção:
@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));
}
pedido 5 Multipart POST
Para enviar um pedido Multipart Post, precisamos RequestBody construído como um MultipartBody para publicar documentos, nomes de usuário e senhas solicitação 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));
}
codificação de caracteres 6 padrão sem enviar pedido POST
codificação de caracteres padrão 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"));
}
Se nós queremos usar outras codificações de caracteres, podemos usá-lo como MediaType.parse () O segundo parâmetro passado:
@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 resumo
Neste ensaio, damos alguns exemplos de uso pedido OkHttp POST enviada pelo cliente.
Como de costume, o código de exemplo neste artigo foi publicado no GitHub diante.