HttpClient

HttpClient


简介:HttpClient‌是Apache Jakarta Common下的一个子项目,主要用于提供高效的、支持最新HTTP协议的客户端编程工具包。它支持HTTP协议的所有标准请求方法,如GET、POST、PUT、DELETE、OPTIONS等,并且支持HTTP协议的最新版本和建议‌

参考文档:

Apache HttpComponents – HttpClient Overviewicon-default.png?t=O83Ahttps://hc.apache.org/httpcomponents-client-4.5.x/index.html

  • 支持所有HTTP请求方法‌:如GET、POST、PUT、DELETE、OPTIONS等‌。

  • 高效的连接管理‌:能够高效地管理与服务器的连接池,减少频繁创建和关闭连接的开销‌。

  • 同步与异步请求‌:支持同步和异步请求,同步请求会阻塞线程直到响应返回,而异步请求则允许程序继续运行并在响应到达时处理它‌。

  • 丰富的API‌:提供了丰富的接口来解析服务器的响应内容,例如解析JSON或XML响应体等‌

简单来说:就是可以使用Java代码的方式来发送http请求

核心API

  • HTTPClient接口

HttpClient 接口是 Apache HttpClient 库中的一个核心接口,它定义了执行 HTTP 请求和接收 HTTP 响应的基本方法。不同的 HttpClient 实现会提供具体的实现类来实现这个接口,而提供与 HTTP 服务器进行交互的能力。

  • CloseableHttpClient接口

1.CloseableHttpClient 是一个核心接口,用于表示一个可以执行 HTTP 请求并接收 HTTP 响应的客户端。它继承自 HttpClient 接口,并添加了 close() 方法,允许显式关闭客户端实例以释放资源。

2.CloseableHttpClient 的主要用途是发送各种类型的 HTTP 请求(如 GET、POST、PUT、DELETE 等)到指定的服务器,并处理服务器返回的响应。它提供了灵活的配置选项,允许您设置连接参数、超时时间、重试策略等,以满足不同的网络请求需求。

  • HttpClients类

HttpClients 是 Apache HttpClient 库中的一个工具类,提供了一系列静态方法用于创建 CloseableHttpClient 实例。

createDefault():创建一个具有默认配置的 CloseableHttpClient 实例。这种方法适用于大多数常见情况,它使用了一组合理的默认设置。

custom():返回一个 HttpClientBuilder 实例,允许您通过链式调用来自定义 CloseableHttpClient 的配置。这种方法提供了更高的灵活性,允许您根据具体需求配置客户端的各种参数。

  • HttpRequestBase 抽象类

HttpGet、HttpPost、HttpPut、HttpDelete 等:这些类继承自 HttpRequestBase,分别用于表示不同类型的 HTTP 请求(GET、POST、PUT、DELETE 等)。

  • HttpEntity 接口

用于表示请求或响应的主体内容。它提供了读取和写入数据的方法。

  • CloseableHttpResponse接口

1.CloseableHttpResponse 是一个接口,它表示一个可以关闭的 HTTP 响应。这个接口继承自 HttpResponse,并添加了 close() 方法,允许在不再需要响应时显式关闭响应流以释放资源。

2.它 的主要用途是封装 HTTP 服务器返回的响应信息,包括状态码、响应头部和响应体等。通过实现这个接口,HttpClient 库能够提供一个统一的方式来处理这些响应信息。

入门案例:

 准备工作:改pom文件,添加支持HTTPClient的相关依赖

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

在Java代码中使用HTTPClient的几个步骤如下:

①创建HttpClient对象

②创建Http请求对象

③调用HttpClient的execute方法发送请求

/**
 * packageName com.sky.test
 *
 * @author 胡尔摩斯
 * @version 1.0
 * @version0 JDK 17
 * @className HttpClientTest
 * @date 2024/12/9 12:32
 * @description TODO
 */
​
@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();
​
​
    }
​
​
    /**
     * 测试通过httpclient发送POST方式的请求
     */
    @Test
    public void testPOST() throws Exception {
        //创建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();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值