HttpClient入门介绍

简单介绍了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":"略"}}
 */
本站于2025年3月26日建立
使用 Hugo 构建
主题 StackJimmy 设计