Четене на HTTP отговор на тялото като низ в Java

ПОЧИВКА Най-горе

Току що обявих новия курс Learn Spring , фокусиран върху основите на Spring 5 и Spring Boot 2:

>> ПРЕГЛЕД НА КУРСА Java Top

Току що обявих новия курс Learn Spring , фокусиран върху основите на Spring 5 и Spring Boot 2:

>> ПРЕГЛЕД НА КУРСА

1. Въведение

В този урок ще проучим няколко библиотеки за четене на HTTP отговор на тялото като низ в Java. От първите версии Java предоставя HttpURLConnection API. Това включва само основни функции и е известно, че не е много удобно за потребителя.

С пускането на JDK 11, Java представи новия и подобрен HttpClient API за обработка на HTTP комуникация. Ние ще покрием тези библиотеки и ще проверим някои алтернативи като Apache HttpClient и Spring Rest Template.

2. HttpClient

Както споменахме по-рано, HttpClient беше добавен към Java 11. Той ни позволява достъп до ресурси по мрежата. Но за разлика от HttpURLConnection , HttpClient поддържа HTTP / 1.1 и HTTP / 2 . Освен това той предоставя както синхронни, така и асинхронни типове заявки .

HttpClient предлага модерен API с много гъвкавост и мощни функции. Основно този API се състои от три основни класа: HttpClient , HttpRequest и HttpResponse .

HttpResponse описва резултата от извикване на HttpRequest . HttpResponse не се създава директно и се предоставя, когато тялото е получено изцяло.

За да прочетем тялото на отговора като низ, първо ще трябва да създадем прости клиентски и заявяващи обекти:

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

След това просто използваме BodyHandlers и извикваме метода наString (), за да върнем отговора:

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

3. HttpURLConnection

HttpURLConnection е лек HTTP клиент, използван за достъп до ресурси чрез протокола HTTP или HTTPS и ни позволява да създадем InputStream . След като получим InputStream, можем да го прочетем като нормален локален файл.

В Java основните класове които можем да използваме, за да получите достъп до интернет са java.net.URL класа и java.net.HttpURLConnection клас. Първо, ще използваме класа на URL , за да насочим към уеб ресурс. След това можем да получим достъп до него, като използваме класа HttpURLConnection .

За да получим тялото на отговора от URL като String , първо трябва да създадем HttpURLConnection, използвайки нашия URL :

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

В новия адрес (DUMMY_URL) .openConnection () връща HttpURLConnection . Този обект ни позволява да добавяме заглавки или да проверяваме кода за отговор.

След това нека вземем InputStream от обекта за свързване :

InputStream inputStream = connection.getInputStream();

И накрая, трябва да преобразуваме InputStream в низ .

4. Apache HttpClient

В този раздел ще видим как да използваме Apache HttpClient за четене на HTTP тяло на отговор като низ.

За да използваме тази библиотека, ще трябва да добавим нейната зависимост към нашия проект Maven:

 org.apache.httpcomponents httpclient 4.5.12 

Можем да извличаме и изпращаме данни чрез класа CloseableHttpClient . За да създадем негов екземпляр с конфигурация по подразбиране, можем да използваме HttpClients.createDefault () .

CloseableHttpClient предоставя метод за изпълнение за изпращане и получаване на данни. Този метод използва параметър от тип HttpUriRequest , който има много подкласове, включително HttpGet и HttpPost .

Нека първо създадем обект HttpGet :

HttpGet request = new HttpGet(DUMMY_URL);

Второ, нека създадем клиента :

CloseableHttpClient client = HttpClients.createDefault();

Трето, извличаме обекта за отговор от резултата на метода за изпълнение :

CloseableHttpResponse response = client.execute(request);

И накрая, връщаме тялото на отговора, като преобразуваме обекта на отговор в низ :

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

5. Spring RestTemplate

В този раздел ще видим как да използваме Spring RestTemplate за четене на HTTP тяло на отговора като низ.

Класът RestTemplate е основен инструмент, предоставен от Spring, който предлага прост шаблон за извършване на HTTP операции от страна на клиента над основните HTTP клиентски библиотеки като JDK HttpURLConnection , Apache HttpClient и други.

RestTemplate предоставя някои полезни методи за създаване на HTTP заявки и обработка на отговори.

Можем да използваме тази библиотека, като първо добавим някои зависимости към нашия проект Maven:

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

За да направите уеб заявка и да върнете тялото на отговора като низ, нека първо създадем екземпляр на RestTemplate :

RestTemplate restTemplate = new RestTemplate();

Второ, получаваме обекта за отговор, като извикваме метода getForObject () , предаваме URL и желания тип отговор - ще използваме String.class в нашия пример:

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

6. Заключение

В тази статия видяхме как да използваме няколко библиотеки за четене на HTTP отговор на тялото като низ .

Както обикновено, пълният код е достъпен в GitHub.

ПОЧИВКА отдолу

Току що обявих новия курс Learn Spring , фокусиран върху основите на Spring 5 и Spring Boot 2:

>> ПРЕГЛЕД НА КУРСА Java отдолу

Току що обявих новия курс Learn Spring , фокусиран върху основите на Spring 5 и Spring Boot 2:

>> ПРЕГЛЕД НА КУРСА