Panduan Pantas untuk Mengemukakan Permintaan dengan OkHttp

1. Pengenalan

Kami merangkumi asas-asas klien OkHttp dalam Panduan kami untuk OkHttp.

Dalam tutorial ringkas ini, kita akan melihat secara khusus pelbagai jenis permintaan POST untuk klien versi 3.x.

2. POST Asas

Kita boleh menggunakan FormBody.Builder untuk membina asas RequestBody untuk menghantar dua parameter - nama pengguna dan kata laluan - dengan permintaan 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. POST dengan Keizinan

Sekiranya kami ingin mengesahkan permintaan, kami dapat menggunakan pembangun Credentials.basic untuk menambahkan kelayakan ke tajuk.

Dalam contoh mudah ini, kami juga akan menghantar String sebagai badan permintaan:

@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. POST dengan JSON

Untuk menghantar JSON dalam badan permintaan, kita harus menetapkan aplikasi jenis media / json . Kita boleh melakukannya dengan menggunakan pembangun RequestBody.create :

@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. Permintaan POST Multipart

Contoh terakhir yang akan kita lihat ialah permintaan multipart POST. Kita perlu membina RequestBody sebagai MultipartBody untuk menghantar fail, nama pengguna, dan kata laluan:

@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. POST dengan Pengekodan Karakter Tidak Lalai

Pengekodan watak lalai OkHttp adalah 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")); }

Sekiranya kita ingin menggunakan pengekodan watak yang berbeza, kita dapat meneruskannya sebagai parameter kedua dari 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. Kesimpulannya

Dalam artikel pendek ini, kami melihat beberapa contoh permintaan POST dengan klien OkHttp .

Seperti biasa, contoh kod boleh didapati di GitHub.