介绍 HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
HttpClient作用:模块客户端向服务器发送HTTP请求
- 发送HTTP请求
- 接收响应数据
HttpClient应用场景: 一般用于调用第三方接口 当我们在使用扫描支付、查看地图、获取验证码、查看天气等功能时
HttpClient的maven坐标:
org.apache.httpcomponents httpclient 4.5.13HttpClient的核心API:
- HttpClient:Http客户端对象类型,使用该类型对象可发起Http请求。
- HttpClients:可认为是构建器,可创建HttpClient对象。
- CloseableHttpClient:实现类,实现了HttpClient接口。
- HttpGet:Get方式请求类型。
- HttpPost:Post方式请求类型。
HttpClient发送请求步骤:
- 创建HttpClient对象
- 创建Http请求对象
- 调用HttpClient的execute方法发送请求
发送get请求代码演示:
/**
* java模拟浏览器向服务器发送Get请求
* @throws Exception
*/
@Test
public void htTest() throws Exception{
//创建httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
//创建请求对象
HttpGet request = new HttpGet("http://localhost:8080/admin/shop/status");
request.setHeader("token", "eyJhbGciOiJIUzI1NiJ9.eyJlbXBJZCI6MSwiZXhwIjoxNzAwMzAyMzc1fQ.gUFqsNg44ezAGauLEGUw0cuQ3hzGeZw-uJUVcmwo-ik");
//发送请求,获取响应
CloseableHttpResponse response = httpClient.execute(request);
//获取服务端返回的状态码
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();
}
发送post请求代码演示:
/**
* 测试HttpClient发送post请求
* @throws Exception
*/
@Test
public void postTest() throws Exception{
CloseableHttpClient httpClient = HttpClients.createDefault();
//构造post请求对象
HttpPost request = new HttpPost("http://localhost:8080/admin/employee/login");
//构造POST请求对象
EmployeeLoginDTO employeeLoginDTO = new EmployeeLoginDTO();
employeeLoginDTO.setUsername("admin");
employeeLoginDTO.setPassword("123456");
//把对象转化成josh格式
String json = JSON.toJSONString(employeeLoginDTO);
StringEntity entity = new StringEntity(json);
entity.setContentType("application/json");
entity.setContentEncoding("UTF-8");
request.setEntity(entity);
CloseableHttpResponse response = httpClient.execute(request);
int code = response.getStatusLine().getStatusCode();
System.out.println("服务端返回的状态码:" + code);
HttpEntity entity1 = response.getEntity();
String data = EntityUtils.toString(entity1);
System.out.println("服务端返回的数据为:" +data);
//关闭资源
response.close();
httpClient.close();
}