Skip to content

HttpClient


基本介绍

HttpClient 介绍

HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议

HttpClient 作用

发送 HTTP 请求

接收响应数据

应用场景

当我们在使用扫描支付、查看地图、获取验证码、查看天气等功能时

其实,应用程序本身并未实现这些功能,都是在应用程序里访问提供这些功能的服务,访问这些服务需要发送 HTTP 请求,并且接收响应数据,可通过 HttpClient 来实现

引入依赖

xml
<dependency>
	<groupId>org.apache.httpcomponents</groupId>
	<artifactId>httpclient</artifactId>
	<version>4.5.13</version>
</dependency>

正常来说,首先,应该导入 HttpClient 相关的坐标,但在项目中,就算不导入,也可以使用相关的 API

因为在项目中已经引入了 aliyun-sdk-oss 坐标,通过依赖传递,已经包含了 HttpClient 相关依赖

xml
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
</dependency>

核心 API

HttpClient:Http 客户端对象类型,使用该类型对象可发起 Http 请求

HttpClients:可认为是构建器,可创建 HttpClient 对象

CloseableHttpClient:实现类,实现了 HttpClient 接口

HttpGet:Get 方式请求类型

HttpPost:Post 方式请求类型

发送请求步骤

(1)创建 HttpClient 对象

(2)创建 Http 请求对象

(3)调用 HttpClient 的 execute 方法发送请求

入门案例

Get 方式请求

java
@SpringBootTest
public class HttpClient {
    @Test
    public void testGet() throws IOException {
        // 创建 com.sky.test.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();
    }
}

Post 方式请求

java
@SpringBootTest
public class HttpClient {
    @Test
    public void testPost() throws IOException {
        // 创建 com.sky.test.HttpClient 对象
        CloseableHttpClient httpClient = HttpClients.createDefault();

        // 创建请求对象
        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());

        // 指定请求编码方式
        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();

    }
}