拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 在Java中以字符串形式读取HTTP响应正文

在Java中以字符串形式读取HTTP响应正文

白鹭 - 2021-11-24 459 0 0

1.简介

在本教程中,我们将探索几个库,用于在Java中将HTTP响应正文作为字符串读取。从第一个版本开始,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主要包括三个核心类: HttpClientHttpRequestHttpResponse

HttpResponse描述了HttpRequest调用的结果。 HttpResponse不是直接创建的,当正文被完全接收后才可以使用。

要将响应主体读取为String,我们首先需要创建简单的客户端和请求对象:

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. HttpURLConnection

HttpURLConnection是一个轻量级的HTTP客户端,用于通过HTTP或HTTPS协议访问资源,并允许我们创建InputStream 。一旦获得InputStream,我们就可以像读取普通的本地文件一样读取它。

在Java中,可用于访问Internet的主要类是java.net.URL类和java.net.HttpURLConnection类。首先,我们将使用URL类来指向Web资源。然后,我们可以使用HttpURLConnection类访问它。

URLString获取响应主体,我们首先应使用URL创建一个HttpURLConnection

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

new URL(DUMMY_URL).openConnection()返回HttpURLConnection 。这个对象允许我们添加标题或检查响应代码。

接下来,让我们connection**对象获取InputStream**

InputStream inputStream = connection.getInputStream();

最后,我们需要InputStream转换为String

4. Apache HttpClient

在本节中,我们将看到如何使用Apache HttpClient读取HTTP响应正文作为字符串。

要使用此库,我们需要将其依赖项添加到我们的Maven项目中:

<dependency>

 <groupId>org.apache.httpcomponents</groupId>

 <artifactId>httpclient</artifactId>

 <version>4.5.12</version>

 </dependency>

我们可以**CloseableHttpClient类检索和发送数据**。要使用默认配置创建它的实例,我们可以使用HttpClients.createDefault()

CloseableHttpClient提供了一种execute方法来发送和接收数据。此方法使用类型为HttpUriRequest的参数,该参数具有许多子类,包括HttpGetHttpPost

首先创建一个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 RestTemplate

在本节中,我们将看到如何使用Spring RestTemplate读取HTTP响应主体作为字符串。

RestTemplate类是Spring提供的基本工具,它提供了一个简单的模板,可用于在基础HTTP客户端库(例如JDK HttpURLConnection ,Apache HttpClient等)上进行客户端HTTP操作。

RestTemplate提供了一些用于创建HTTP请求和处理响应的有用方法。

我们可以通过首先向我们的Maven项目中添加一些依赖项来使用该库:

<dependency>

 <groupId>org.springframework.boot</groupId>

 <artifactId>spring-boot-starter-web</artifactId>

 <version>${spring-boot.version}</version>

 </dependency>

 <dependency>

 <groupId>org.springframework.boot</groupId>

 <artifactId>spring-boot-starter-test</artifactId>

 <version>${spring-boot.version}</version>

 <scope>test</scope>

 </dependency>

要发出Web请求并以字符串形式返回响应主体,我们首先**创建一个RestTemplate**实例:

RestTemplate restTemplate = new RestTemplate();

其次,我们通过调用方法getForObject() ,传入URL和所需的响应类型来获得响应对象-在示例中,我们将使用String.class

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

六,结论

在本文中,我们已经看到了如何使用多个库以String读取HTTP响应正文。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *