- Чтение тела ответа HTTP как строки в Java
- 2. HTTP-клиент
- 3. HttpURL-соединение
- 4. HTTP-клиент Apache
- 5. Шаблон Spring Rest
- 6. Весенний веб-клиент
- 7. Заключение
- Java get response message
- Nested Class Summary
- Method Summary
- Method Detail
- statusCode
- request
- previousResponse
- headers
- body
- sslSession
- uri
- version
- Java get response message
- Class ResponseMessage
- 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
- getHeaderValues
- getHeaderValue
- getHeaderValue
- getURL
- getBody
- getBodyString
- getStatusCode
- getRequestId
- getType
- toString
- toJson
- equals
- hashCode
Чтение тела ответа 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.