1. 介绍
1.1 简介
HttpClient
是 Apache Jakarta Commons 项目中的一个子项目,为开发人员提供了一个高效、功能丰富、支持最新 HTTP 协议的客户端工具包。它不仅可以支持 HTTP/1.1 和 HTTP/2 等最新版本的 HTTP 协议,还包括一系列高级特性,如连接池管理、SSL 支持、自动重试机制、代理支持、带宽限制等,旨在帮助开发者轻松进行 HTTP 通信。
1.2 HttpClient作用
-
发送 HTTP 请求:通过 HttpClient 可以向服务端发送 GET、POST、PUT、DELETE 等 HTTP 请求。
-
接收响应数据:在请求发出后,可以获取到服务器返回的响应信息,包括状态码、响应头以及响应体内容。
1.3 HttpClient应用场景
在现代应用中,HttpClient 的使用场景非常广泛,以下是几个常见的应用场景:
-
扫描支付:例如调用第三方支付接口(如支付宝、微信支付)进行扫码支付。应用程序通过 HttpClient 发送支付请求,获取支付二维码。
-
地图服务:例如调用百度地图、Google Maps 的 API 获取地理位置信息,应用程序通过 HttpClient 向这些服务发送请求,并接收相应的地理信息数据。
-
验证码获取:例如短信或邮箱验证码,应用程序调用第三方短信或邮件服务,向用户发送验证码。
-
天气查询:应用程序通过访问第三方天气服务 API(如中国气象网、OpenWeather API)获取最新的天气信息并展示给用户。
-
社交媒体交互:例如从 Twitter、Facebook 或 LinkedIn 获取用户动态,进行社交媒体内容的展示与分析。
在这些场景下,应用程序本身并未实现这些具体功能,而是通过发送 HTTP 请求来访问和利用第三方提供的功能服务。通过使用 HttpClient,开发者可以轻松构建、发送 HTTP 请求,并接收和解析响应数据。
1.4 使用
1.4.1 HttpClient的maven坐标
要使用 HttpClient,首先需要在项目的 Maven 配置文件(pom.xml
)中添加依赖。可以通过以下 Maven 坐标来引入 HttpClient 库:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
1.4.2 HttpClient的核心API
-
HttpClient:HTTP 客户端接口,定义了 HTTP 通信的主要方法,用于发起 HTTP 请求。
-
HttpClients:是
HttpClient
的构建器类,可以通过静态方法来创建HttpClient
实例,提供了方便的配置方式,如连接池和超时设置等。 -
CloseableHttpClient:
HttpClient
的一个实现类,实现了自动资源管理接口Closeable
,在请求完成后可以自动关闭资源。 -
HttpGet:代表 HTTP GET 请求,常用于获取数据。
-
HttpPost:代表 HTTP POST 请求,通常用于发送数据,如表单提交和 JSON 数据传输。
1.4.3 HttpClient发送请求步骤
使用 HttpClient 发送请求的步骤如下:
(1)创建 HttpClient 对象
-
通过
HttpClients.createDefault()
方法创建一个CloseableHttpClient
实例。 -
如果需要定制化配置,例如连接池大小、超时设置等,可以使用
HttpClients.custom()
方法来构建。
CloseableHttpClient httpClient = HttpClients.createDefault();
(2)创建 HTTP 请求对象
-
根据请求的类型,创建相应的请求对象,如
HttpGet
、HttpPost
等。 -
设置请求的 URL 以及请求头、请求参数等。
HttpGet request = new HttpGet("https://api.example.com/data");
request.setHeader("Accept", "application/json");
(3)调用 HttpClient 的 execute 方法发送请求
-
使用
httpClient.execute(request)
方法发送请求,并获取响应对象CloseableHttpResponse
。 -
响应对象可以用来获取状态码、响应头和响应体数据。
-
操作完成后,记得关闭
CloseableHttpClient
和CloseableHttpResponse
以释放资源。
try (CloseableHttpResponse response = httpClient.execute(request)) {
int statusCode = response.getStatusLine().getStatusCode();
HttpEntity entity = response.getEntity();
String result = EntityUtils.toString(entity);
System.out.println("Response status code: " + statusCode);
System.out.println("Response content: " + result);
} catch (IOException e) {
e.printStackTrace();
}
2. 使用示例
2.1 GET方式请求
2.1.1 导入maven坐标
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
2.1.2 代码示例
@SpringBootTest
public class HttpClientTest {
/**
* 测试通过 HttpClient 发送 GET 请求的方法。
* 使用 SpringBootTest 注解,支持 Spring Boot 应用环境下的测试。
*/
@Test
public void testGET() throws Exception {
// 1. 创建 HttpClient 对象
// 使用 HttpClients 的静态方法创建一个默认的 HttpClient 实例,能够发送 HTTP 请求
CloseableHttpClient httpClient = HttpClients.createDefault();
// 2. 创建 GET 请求对象
// HttpGet 对象代表一个 HTTP GET 请求,这里设置请求的 URL 为 "http://localhost:8080/status"
HttpGet httpGet = new HttpGet("http://localhost:8080/status");
// 3. 发送请求并接受响应结果
// 使用 HttpClient 的 execute 方法发送请求,并获取服务器的响应对象(CloseableHttpResponse)
CloseableHttpResponse response = httpClient.execute(httpGet);
// 4. 获取服务器返回的状态码
// 从响应对象中提取状态码,状态码可以用于判断请求是否成功 (如 200 表示成功)
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("服务端返回的状态码为:" + statusCode);
// 5. 获取响应体内容
// 从响应对象中获取响应体(HttpEntity),将其转换为字符串格式
// 需要使用 EntityUtils.toString() 将 HttpEntity 转换为可读的字符串格式
HttpEntity entity = response.getEntity();
String body = EntityUtils.toString(entity);
System.out.println("服务端返回的数据为:" + body);
// 6. 关闭资源
// 为了避免资源泄露,应该在完成请求后关闭响应对象和 HttpClient 对象
response.close();
httpClient.close();
}
}
2.2 POST方式请求
POST方式请求方法,相比GET请求来说,POST请求若携带参数需要封装请求体对象,并将该对象设置在请求对象中。
/**
* 测试通过 HttpClient 发送 POST 请求的方法。
* 使用 SpringBootTest 注解,支持 Spring Boot 应用环境下的测试。
*/
@Test
public void testPOST() throws Exception {
// 1. 创建 HttpClient 对象
// 使用 HttpClients 的静态方法创建一个默认的 HttpClient 实例,用于发送 HTTP 请求
CloseableHttpClient httpClient = HttpClients.createDefault();
// 2. 创建 POST 请求对象
// HttpPost 对象代表一个 HTTP POST 请求,这里设置请求的 URL 为 "http://localhost:8080/admin/employee/login"
HttpPost httpPost = new HttpPost("http://localhost:8080/admin/employee/login");
// 3. 构造 JSON 数据
// 创建一个 JSON 对象,将用户名和密码放入 JSON 中,模拟登录请求的请求体
JSONObject jsonObject = new JSONObject();
jsonObject.put("username", "admin");
jsonObject.put("password", "123456");
// 4. 设置请求实体(请求体)
// 将 JSON 对象转换为字符串并构建成 StringEntity 对象,指定请求体内容
StringEntity entity = new StringEntity(jsonObject.toString());
// 设置请求体的编码方式为 UTF-8
entity.setContentEncoding("utf-8");
// 设置请求体的数据格式为 JSON
entity.setContentType("application/json");
// 将请求实体添加到 POST 请求中
httpPost.setEntity(entity);
// 5. 发送请求并接收响应
// 使用 HttpClient 的 execute 方法发送 POST 请求,并获取服务器返回的响应对象(CloseableHttpResponse)
CloseableHttpResponse response = httpClient.execute(httpPost);
// 6. 解析返回结果
// 获取响应状态码,可用于判断请求是否成功(如 200 表示成功)
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("响应码为:" + statusCode);
// 获取响应体内容,将响应的 HttpEntity 转换为字符串格式
HttpEntity entity1 = response.getEntity();
String body = EntityUtils.toString(entity1);
System.out.println("响应数据为:" + body);
// 7. 关闭资源
// 为避免资源泄露,在完成请求后关闭响应对象和 HttpClient 对象
response.close();
httpClient.close();
}
标签:HTTP,请求,对象,发送,响应,第三方,HttpClient
From: https://blog.csdn.net/qq_46637011/article/details/143251518