Membaca Badan Respons HTTP sebagai Rentetan di Java

REST Teratas

Saya baru sahaja mengumumkan kursus Learn Spring yang baru , yang berfokus pada asas-asas Spring 5 dan Spring Boot 2:

>> SEMAK KURSUS Java Atas

Saya baru sahaja mengumumkan kursus Learn Spring yang baru , yang berfokus pada asas-asas Spring 5 dan Spring Boot 2:

>> SEMAK KURSUS

1. Pengenalan

Dalam tutorial ini, kita akan meneroka beberapa perpustakaan untuk membaca badan respons HTTP sebagai rentetan di Java. Sejak versi pertama, Java menyediakan API HttpURLConnection . Ini hanya merangkumi ciri asas dan terkenal kerana tidak mesra pengguna.

Dengan pelancaran JDK 11, Java memperkenalkan HttpClient API baru dan lebih baik untuk menangani komunikasi HTTP. Kami akan merangkumi perpustakaan ini, dan kami akan memeriksa beberapa alternatif seperti Apache HttpClient dan Spring Rest Template.

2. Pelanggan Http

Seperti yang telah kami sebutkan sebelumnya, HttpClient telah ditambahkan ke Java 11. Ini membolehkan kami mengakses sumber melalui rangkaian. Tetapi, tidak seperti HttpURLConnection , HttpClient menyokong HTTP / 1.1 dan HTTP / 2 . Lebih-lebih lagi, ia menyediakan jenis permintaan segerak dan tak segerak .

HttpClient menawarkan API moden dengan banyak fleksibiliti dan ciri hebat. Terutamanya, API ini terdiri daripada tiga kelas teras: HttpClient , HttpRequest , dan HttpResponse .

HttpResponse menerangkan hasil panggilan HttpRequest . HttpResponse tidak dibuat secara langsung dan tersedia apabila badan telah diterima sepenuhnya.

Untuk membaca badan respons sebagai Rentetan, pertama-tama kita perlu membuat klien sederhana dan meminta objek:

HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(DUMMY_URL)) .build();

Kemudian, kita hanya menggunakan BodyHandlers dan memanggil kaedah String () untuk mengembalikan tindak balas:

HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());

3. Sambungan HttpURLC

HttpURLConnection adalah klien HTTP ringan yang digunakan untuk mengakses sumber melalui protokol HTTP atau HTTPS dan membolehkan kami membuat InputStream . Setelah mendapat InputStream, kita dapat membacanya seperti fail tempatan biasa.

Di Java, kelas utama yang dapat kita gunakan untuk mengakses Internet adalah kelas java.net.URL dan kelas java.net.HttpURLConnection . Pertama, kami akan menggunakan kelas URL untuk menunjukkan sumber web. Kemudian, kita boleh mengaksesnya dengan menggunakan kelas HttpURLConnection .

Untuk mendapatkan badan respons dari URL sebagai Rentetan , pertama-tama kita harus membuat HttpURLConnection menggunakan URL kami :

HttpURLConnection connection = (HttpURLConnection) new URL(DUMMY_URL).openConnection();

The URL baru (DUMMY_URL) .openConnection () mengembalikan HttpURLConnection . Objek ini membolehkan kita menambah tajuk atau memeriksa kod respons.

Seterusnya, mari dapatkan InputStream dari objek sambungan :

InputStream inputStream = connection.getInputStream();

Akhirnya, kita perlu menukar InputStream menjadi String .

4. Pelanggan Http Apache

Di bahagian ini, kita akan melihat cara menggunakan Apache HttpClient untuk membaca badan respons HTTP sebagai rentetan.

Untuk menggunakan perpustakaan ini, kami perlu menambahkan kebergantungannya ke projek Maven kami:

 org.apache.httpcomponents httpclient 4.5.12 

Kami dapat mengambil dan menghantar data melalui kelas CloseableHttpClient . Untuk membuat contohnya dengan konfigurasi lalai kita dapat menggunakan HttpClients.createDefault () .

CloseableHttpClient menyediakan kaedah pelaksanaan untuk menghantar dan menerima data. Kaedah ini menggunakan parameter jenis HttpUriRequest , yang mempunyai banyak subkelas termasuk HttpGet dan HttpPost .

Mari buat objek HttpGet terlebih dahulu :

HttpGet request = new HttpGet(DUMMY_URL);

Kedua, mari buat pelanggan :

CloseableHttpClient client = HttpClients.createDefault();

Ketiga, kami mengambil objek tindak balas dari hasil kaedah pelaksanaan :

CloseableHttpResponse response = client.execute(request);

Akhirnya, kami mengembalikan badan tindak balas dengan menukar entiti tindak balas ke Rentetan :

HttpEntity entity = response.getEntity(); String result = EntityUtils.toString(entity);

5. Templat Rehat Musim Bunga

Di bahagian ini, kita akan melihat cara menggunakan Spring RestTemplate untuk membaca badan respons HTTP sebagai rentetan.

The RestTemplate kelas adalah alat penting yang disediakan oleh Spring yang ditawarkan template yang mudah untuk membuat operasi klien HTTP lebih asas perpustakaan pelanggan HTTP seperti JDK HttpURLConnection , Apache HttpClient , dan lain-lain.

RestTemplate menyediakan beberapa kaedah yang berguna untuk membuat permintaan HTTP dan menangani tindak balas.

Kami boleh menggunakan perpustakaan ini dengan menambahkan beberapa kebergantungan pada projek Maven kami:

 org.springframework.boot spring-boot-starter-web ${spring-boot.version}   org.springframework.boot spring-boot-starter-test ${spring-boot.version} test 

Untuk membuat permintaan web dan mengembalikan badan respons sebagai rentetan, pertama-tama kita buat contoh RestTemplate :

RestTemplate restTemplate = new RestTemplate();

Kedua, kita mendapat objek tindak balas dengan memanggil kaedah getForObject () , memasukkan URL dan jenis respons yang diinginkan - kita akan menggunakan String.class dalam contoh kita:

String response = restTemplate.getForObject(DUMMY_URL, String.class);

6. Kesimpulannya

Dalam artikel ini, kami telah melihat bagaimana menggunakan beberapa perpustakaan untuk membaca badan respons HTTP sebagai Rentetan .

Seperti biasa, kod lengkap boleh didapati di GitHub.

REST bawah

Saya baru sahaja mengumumkan kursus Learn Spring yang baru , yang berfokus pada asas-asas Spring 5 dan Spring Boot 2:

>> SEMAK KURSUS Java bawah

Saya baru sahaja mengumumkan kursus Learn Spring yang baru , yang berfokus pada asas-asas Spring 5 dan Spring Boot 2:

>> SEMAK KURSUS