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主要包括三个核心类: HttpClient
, HttpRequest
和HttpResponse
。
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
类访问它。
URL
以String
获取响应主体,我们首先应使用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
的参数,该参数具有许多子类,包括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 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 评论