Java get response message

Чтение тела ответа HTTP как строки в Java

В этом руководстве мы рассмотрим несколько библиотек для чтения тела ответа HTTP в виде строки в Java. Начиная с первых версий Java предоставляет API HttpURLConnection . Он включает в себя только основные функции и известен тем, что не очень удобен для пользователя.

В JDK 11 компания Java представила новый и улучшенный API HttpClient для обработки связи по протоколу HTTP. Мы рассмотрим эти библиотеки и проверим альтернативы, такие как Apache HttpClient и Spring Rest Template .

2. HTTP-клиент ​

Как мы упоминали ранее, 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 и вызываем метод ofString() для возврата ответа:

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

3. HttpURL-соединение ​

HttpURLConnection — это легкий HTTP-клиент, используемый для доступа к ресурсам по протоколу HTTP или HTTPS и позволяющий нам создать InputStream . Получив InputStream, мы можем прочитать его как обычный локальный файл.

В Java основными классами, с которыми мы можем получить доступ к Интернету, являются класс java.net.URL и класс java.net.HttpURLConnection . Во-первых, мы будем использовать класс URL для указания на веб-ресурс. Затем мы можем получить к нему доступ с помощью класса HttpURLConnection .

Чтобы получить тело ответа из URL -адреса в виде строки , мы должны сначала создать HttpURLConnection , используя наш URL -адрес :

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

Новый URL(DUMMY_URL).openConnection() возвращает HttpURLConnection . Этот объект позволяет нам добавлять заголовки или проверять код ответа.

Далее, давайте получим InputStream из « объекта подключения :

 InputStream inputStream = connection.getInputStream(); 

4. HTTP-клиент Apache ​

В этом разделе мы увидим, как использовать Apache HttpClient для чтения тела ответа HTTP в виде строки.

Чтобы использовать эту библиотеку, нам нужно добавить ее зависимость в наш проект Maven:

 dependency>   groupId>org.apache.httpcomponentsgroupId>   artifactId>httpclientartifactId>   version>4.5.12version>   dependency> 

Мы можем получать и отправлять данные через класс CloseableHttpClient . Чтобы создать его экземпляр с конфигурацией по умолчанию, мы можем использовать HttpClients.createDefault() .

CloseableHttpClient предоставляет метод выполнения для отправки и получения данных. Этот метод использует параметр типа HttpUriRequest , который имеет множество подклассов, включая HttpGet и HttpPost .

Давайте сначала создадим объект HttpGet :

 HttpGet request = new HttpGet(DUMMY_URL); 

Во-вторых, давайте создадим клиент :

 CloseableHttpClient client = HttpClients.createDefault(); 

В- третьих, мы извлекаем объект ответа из результата метода execute :

 CloseableHttpResponse response = client.execute(request); 

Наконец, мы возвращаем тело ответа, преобразуя объект ответа в String :

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

5. Шаблон Spring Rest ​

В этом разделе мы увидим, как использовать Spring RestTemplate для чтения тела ответа HTTP в виде строки. Мы должны отметить, что RestTemplate теперь устарел : мы должны рассмотреть возможность использования Spring WebClient, как описано в следующей главе.

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

RestTemplate предоставляет несколько полезных методов для создания HTTP-запросов и обработки ответов.

Мы можем использовать эту библиотеку, предварительно добавив некоторые зависимости в наш проект Maven:

 dependency>   groupId>org.springframework.bootgroupId>   artifactId>spring-boot-starter-webartifactId>   version>$ version>   dependency>   dependency>   groupId>org.springframework.bootgroupId>   artifactId>spring-boot-starter-testartifactId>   version>$ version>   scope>testscope>   dependency> 

Чтобы сделать веб-запрос и вернуть тело ответа в виде строки, давайте сначала создадим экземпляр RestTemplate :

 RestTemplate restTemplate = new RestTemplate(); 

Во- вторых, мы получаем объект ответа, вызывая метод getForObject() , передавая URL-адрес и желаемый тип ответа — в нашем примере мы будем использовать String.class :

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

6. Весенний веб-клиент​

Наконец, мы увидим, как использовать Spring WebClient, реактивное, неблокирующее решение, заменяющее Spring RestTemplate .

Мы можем использовать эту библиотеку, сначала добавив зависимость spring-boot-starter-webflux в наш проект Maven:

 dependency>   groupId>org.springframework.bootgroupId>   artifactId>spring-boot-starter-webfluxartifactId>   dependency> 

Самый простой способ выполнить HTTP-запрос Get — использовать метод create:

 WebClient webClient = WebClient.create(DUMMY_URL); 

Самый простой способ выполнить HTTP-запрос Get — вызвать методы получения и извлечения . Затем мы будем использовать метод bodyToMono с типом String.class , чтобы извлечь тело как один экземпляр String:

 MonoString> body = webClient.get().retrieve().bodyToMono(String.class); 

Наконец, давайте вызовем метод блока , чтобы указать веб-потоку ждать, пока весь основной поток не будет прочитан и скопирован в результат String:

7. Заключение​

В этой статье мы увидели, как использовать несколько библиотек для чтения тела ответа HTTP в виде строки .

Как обычно, полный код доступен на GitHub .

Источник

Java get response message

An HTTP response. An HttpResponse is not created directly, but rather returned as a result of sending an HttpRequest . An HttpResponse is made available when the response status code and headers have been received, and typically after the response body has also been completely received. Whether or not the HttpResponse is made available before the response body has been completely received depends on the BodyHandler provided when sending the HttpRequest . This class provides methods for accessing the response status code, headers, the response body, and the HttpRequest corresponding to this response. The following is an example of retrieving a response as a String:

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

The class BodyHandlers provides implementations of many common response handlers. Alternatively, a custom BodyHandler implementation can be used.

Nested Class Summary

Implementations of BodyHandler that implement various useful handlers, such as handling the response body as a String, or streaming the response body to a file.

Implementations of BodySubscriber that implement various useful subscribers, such as converting the response body bytes into a String, or streaming the bytes to a file.

Initial response information supplied to a BodyHandler when a response is initially received and before the body is processed.

Method Summary

Method Detail

statusCode

request

Returns the HttpRequest corresponding to this response. The returned HttpRequest may not be the initiating request provided when sending. For example, if the initiating request was redirected, then the request returned by this method will have the redirected URI, which will be different from the initiating request URI.

previousResponse

OptionalHttpResponseT>> previousResponse()

Returns an Optional containing the previous intermediate response if one was received. An intermediate response is one that is received as a result of redirection or authentication. If no previous response was received then an empty Optional is returned.

headers

body

Returns the body. Depending on the type of T , the returned body may represent the body after it was read (such as byte[] , or String , or Path ) or it may represent an object with which the body is read, such as an InputStream . If this HttpResponse was returned from an invocation of previousResponse() then this method returns null

sslSession

Returns an Optional containing the SSLSession in effect for this response. Returns an empty Optional if this is not a HTTPS response.

uri

Returns the URI that the response was received from. This may be different from the request URI if redirection occurred.

version

Report a bug or suggest an enhancement
For further API reference and developer documentation see the Java SE Documentation, which contains more detailed, developer-targeted descriptions with conceptual overviews, definitions of terms, workarounds, and working code examples.
Java is a trademark or registered trademark of Oracle and/or its affiliates in the US and other countries.
Copyright © 1993, 2023, Oracle and/or its affiliates, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
All rights reserved. Use is subject to license terms and the documentation redistribution policy.

Источник

Java get response message

Java SE Messaging API Reference for Oracle Internet of Things Cloud Service Client Software Library. Release 21.1.1.0.0-3 E70331-25

Class ResponseMessage

ResponseMessage extends Message class. It stores HTTP headers, status code and URL and body. The body is in byte array. Default encoding for string body is UTF-8. This class is immutable.

Nested Class Summary

Nested classes/interfaces inherited from class com.oracle.iot.client.message.Message

Field Summary

Fields inherited from class com.oracle.iot.client.message.Message

Method Summary

Methods inherited from class com.oracle.iot.client.message.Message

Methods inherited from class java.lang.Object

Method Detail

getHeaders

public final java.util.Map> getHeaders()

getHeaderValues

public final java.util.List getHeaderValues(java.lang.String name)

getHeaderValue

public final java.lang.String getHeaderValue(java.lang.String name, int index)

getHeaderValue

public final java.lang.String getHeaderValue(java.lang.String name)

getURL

public final java.lang.String getURL()

getBody

public final byte[] getBody()

getBodyString

public final java.lang.String getBodyString()

Get HTTP response message body in String . It fromString and return the inner representation of message body to String .

getStatusCode

getRequestId

public java.lang.String getRequestId()

getType

toString

public final java.lang.String toString()

toJson

public final org.json.JSONObject toJson()

equals

public boolean equals(java.lang.Object o)

hashCode

Java SE Messaging API Reference for Oracle Internet of Things Cloud Service Client Software Library. Release 21.1.1.0.0-3 E70331-25

Copyright © 2015, 2017, Oracle. All rights reserved.

Источник

Читайте также:  Решение квадратного уравнения си шарп
Оцените статью