简单介绍了HttpClient的GET、POST请求在SpringBoot中的使用方式
HttpClient
简介
HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
HttpClient应用场景:
当我们在使用扫描支付、查看地图、获取验证码、查看天气等功能时
其实,应用程序本身并未实现这些功能,都是在应用程序里访问提供这些功能的服务,访问这些服务需要发送HTTP请求,并且接收响应数据,可通过HttpClient来实现。
HttpClient的maven坐标:
1
2
3
4
5
|
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
|
HttpClient的核心API:
- HttpClient:Http客户端对象类型,使用该类型对象可发起Http请求。
- HttpClients:可认为是构建器,可创建HttpClient对象。
- CloseableHttpClient:实现类,实现了HttpClient接口。
- HttpGet:Get方式请求类型。
- HttpPost:Post方式请求类型。
HttpClient发送请求步骤:
- 创建HttpClient对象
- 创建Http请求对象
- 调用HttpClient的execute方法发送请求
使用入门
前提
使用前先确保已经导入了HttpClient的依赖
1
2
3
4
5
|
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
|
使用GET方式请求
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
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;
import java.io.IOException;
@SpringBootTest
public class HttpClientTest {
/**
* 测试通过HttpClient发送GET方式的请求
*/
@Test
public void testGET() throws IOException {
// 创建HttpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
// 创建HttpGet对象,设置请求的URL地址
// 此处使用作者当前项目中的接口用于演示
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();
}
}
/**
* 运行结果:
* 响应的状态码:200
* 响应的数据:{"code":1,"msg":null,"data":0}
*/
|
使用POST方式请求
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
@SpringBootTest
public class HttpClientTest {
/**
* 测试通过HttpClient发送POST方式的请求
*/
@Test
public void testPOST() throws Exception {
// 创建HttpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
// 创建HttpPost对象,设置请求的URL地址
HttpPost httpPost = new HttpPost("http://localhost:8080/admin/employee/login");
// 设置请求的参数
JSONObject jsonObject = new JSONObject();
jsonObject.put("username", "admin");
jsonObject.put("password", "123456");
StringEntity entity = new StringEntity(jsonObject.toString());
// 指定请求参数的格式为json
entity.setContentType("application/json");
// 指定请求的编码方式
entity.setContentEncoding("UTF-8");
httpPost.setEntity(entity);
// 发送请求,并获取响应
CloseableHttpResponse response = httpClient.execute(httpPost);
// 解析响应,获取响应的状态码
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("响应的状态码:" + statusCode);
// 获取响应的内容
HttpEntity responseEntity = response.getEntity();
String body = EntityUtils.toString(responseEntity);
System.out.println("响应的数据:" + body);
// 关闭资源
response.close();
httpClient.close();
}
}
/**
* 运行结果:
* 响应的状态码:200
* 响应的数据:{"code":1,"msg":null,"data":{"id":1,"userName":"admin","name":"管理员","token":"略"}}
*/
|