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 评论