HttpClient 入门案例
1. 介绍
HttpClient 是 Apache Jakarta Common 下的子项目,提供了高效、最新、功能丰富的支持 HTTP 协议的客户端编程工具包。它支持 HTTP 协议的最新版本和建议,可以用于发送 HTTP 请求并接收响应数据。
2. 应用场景
在 Java 程序中使用 HttpClient 可以实现以下应用场景:
- 发送 HTTP 请求获取数据:如获取天气信息、访问地图服务、获取验证码等。
- 访问远程服务接口:如调用扫码支付、查询商品信息等。
- 与第三方服务进行交互:如与阿里云 OSS 进行文件上传、下载等。
3. Maven 依赖
在项目的 pom.xml 文件中添加 HttpClient 的 Maven 依赖:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
如果在项目中已经引入了aliyun-sdk-oss
坐标,就算不导入HttpClient
相关的坐标,也可以使用相关的API,因为aliyun-sdk-oss
依赖的底层已经包含了HttpClient
相关依赖:
故选择导入或者不导入均可。
4. 入门案例
4. 1 发送 GET 请求
实现步骤:
- 创建HttpClient对象
- 创建请求对象
- 发送请求,接受响应结果
- 解析结果
- 关闭资源
package com.sky.test;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class HttpClientTest {
/**
* 测试通过httpclient发送GET方式的请求
*/
@Test
public void testGET() throws Exception{
//创建httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
//创建请求对象
HttpGet httpGet = new HttpGet("http://localhost:8080/user/shop/status");
//发送请求,接受响应结果
CloseableHttpResponse response = httpClient.execute(httpGet);
//获取服务端返回的状态码
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("服务端返回的状态码为:" + statusCode);
HttpEntity entity = response.getEntity();
String body = EntityUtils.toString(entity);
System.out.println("服务端返回的数据为:" + body);
//关闭资源
response.close();
httpClient.close();
}
}
测试结果:
4.2. 发送 POST 请求
在HttpClientTest中添加POST方式请求方法,相比GET请求来说,POST请求需携带参数需要封装请求体对象,并将该对象设置在请求对象中。
实现步骤:
- 创建HttpClient对象
- 创建请求对象
- 设置请求参数
- 发送请求,接收响应结果
- 解析响应结果
- 关闭资源
/**
* 测试通过httpclient发送POST方式的请求
*/
@Test
public void testPOST() throws Exception{
// 创建httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
//创建请求对象
HttpPost httpPost = new HttpPost("http://localhost:8080/admin/employee/login");
// import com.alibaba.fastjson.JSONObject;
// 设置请求参数
JSONObject jsonObject = new JSONObject();
jsonObject.put("username", "admin");
jsonObject.put("password", "123456");
StringEntity entity = new StringEntity(jsonObject.toString());
//指定编码格式
entity.setContentEncoding("UTF-8");
//指定数据格式
entity.setContentType("application/json");
httpPost.setEntity(entity);
//发送请求
CloseableHttpResponse response = httpClient.execute(httpPost);
//解析返回结果
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("响应码为:" + statusCode);
HttpEntity entity1 = response.getEntity();
String body = EntityUtils.toString(entity1);
System.out.println("响应数据为:" + body);
//关闭资源
response.close();
httpClient.close();
}
测试结果:
5. 总结
通过以上示例,我们学习了如何使用 HttpClient 发送 HTTP 请求并接收响应。可以根据实际需要调整请求的 URL、参数、请求体等内容。HttpClient 提供了丰富的 API,可以满足各种 HTTP 请求的需求,是 Java 开发中不可或缺的工具之一。