在Java中读取HTTP响应体作为字符串
最后修改:2021年4月15日
1.介绍
在本教程中,我们将探索几个用于将HTTP响应体作为Java字符串读取的库。从第一个版本开始,Java提供了HttpURLConnectionAPI。这只包括基本的功能,并且以不太友好而闻名。
随着JDK 11的发布,Java引入了新的和改进的HttpClient处理HTTP通信的API。我们将介绍这些库,并检查一些替代方案,例如Apache HttpClient和春休息模板.
2.HttpClient
我们以前提到过,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。发送(请求,HttpResponse.BodyHandlers.ofString ());
3.HttpURLConnection
HttpURLConnection轻量级HTTP客户端是否用于通过HTTP或HTTPS协议访问资源,并允许我们创建InputStream.一旦我们获得InputStream,我们可以像正常的本地文件一样读取。
在Java中,我们可以用于访问互联网的主要类是java.net.url.类和java.net.HttpURLConnection类。首先,我们将使用URL类指向一个web资源。然后,我们可以使用HttpURLConnection类。
获取响应体URL作为一个字符串,我们应该首先创建一个HttpURLConnection使用我们的URL:
HttpURLConnection connection = (HttpURLConnection) new URL(DUMMY_URL).openConnection();
的新的URL (DUMMY_URL) .openConnection ()返回一个HttpURLConnection.此对象允许我们添加标题或检查响应代码。
接下来,让我们得到InputStream从连接目的:
connection.getInputStream();
最后,我们需要转换InputStream到A.字符串.
4. Apache.HttpClient
在本节中,我们将看到如何使用ApacheHttpClient读取HTTP响应体作为字符串。
要使用此库,我们需要将其依赖添加到我们的Maven项目:
<依赖> < groupId >表示。httpcomponents httpclient 4.5.12 依赖>
我们可以控件检索并发送数据CloseableHttpClient类.要使用默认配置创建它的实例,我们可以使用HttpClients.createDefault ().
CloseableHttpClient提供了一个执行方法发送和接收数据。此方法使用类型参数HttpUriRequest,它有许多子类,包括HttpGet和HttpPost.
让我们首先创建一个HttpGet对象:
HttpGet request = new HttpGet(DUMMY_URL);
第二,让我们创建客户端:
Closeablehttpclient client = httpclient.createdefault();
第三,我们检索响应对象从此的结果执行方法:
CloseableHttpResponse response = client.execute(request);
最后,通过返回响应体将响应实体转换为字符串:
HttpEntity entity = response.getEntity();String result = EntityUtils.toString(实体);
5.春天创建RestTemplate
在本节中,我们将看到如何使用春天创建RestTemplate读取HTTP响应体作为字符串。
的创建RestTemplateClass是Spring提供的必备工具提供用于制作客户端HTTP操作的简单模板基于底层HTTP客户端库,比如JDKHttpURLConnection, ApacheHttpClient等等。
创建RestTemplate提供了一些有用的方法用于创建HTTP请求和处理响应。
我们可以先在Maven项目中添加一些依赖项来使用这个库:
<依赖> < groupId > org.springframework。启动< / groupId > < artifactId > spring-boot-starter-web < / artifactId > <版本> $ {spring-boot。 依赖> <依赖> org.springframework。启动< / groupId > < artifactId > spring-boot-starter-test < / artifactId > <版本> $ {spring-boot。测试版本}<版本> / <范围> < /范围> < / >的依赖
要发出一个web请求并以字符串形式返回响应体,让我们首先创建一个实例创建RestTemplate:
RestTemplate RestTemplate = new RestTemplate();
二,我们通过调用该方法获取响应对象getforopject(),传入URL和所需的响应类型——我们将使用string.class.在我们的示例:
String response = restTemplate。getForObject (DUMMY_URL String.class);
6.结论
在本文中,我们已经看到了如何使用几个库来读取HTTP响应身体作为一个字符串.
与往常一样,完整的代码是可用的在GitHub.