HttpClient工具类入门

一:介绍

二:作用

  1. 发送 HTTP 请求:HttpClient 可以发送 GET、POST、PUT、DELETE 等各种类型的 HTTP 请求。可以设置请求头、请求参数、请求体等,并支持自定义请求的各种属性。

  2. 处理响应:HttpClient 可以接收服务器返回的 HTTP 响应,并提供了获取响应状态码、响应头、响应体等信息的方法。你可以根据需要解析响应体,比如将响应转换成字符串、JSON 对象或者字节流。

  3. 管理连接:HttpClient 可以管理 HTTP 连接池,从而复用连接,避免频繁地创建和关闭连接,提高性能。它还支持超时设置、代理配置、重试机制等功能,以便更好地管理和控制与服务器的连接。

  4. 支持异步请求:HttpClient 提供了异步请求的能力,可以使用 Future 或回调机制来发送异步请求,从而提高并发性能和响应速度。

  5. 支持认证和安全性:HttpClient 支持基本认证、摘要认证、OAuth 认证等常见的身份验证机制。它还支持 SSL/TLS 加密,可以进行安全的 HTTPS 请求。

三:核心API以及使用HttpClient的步骤

HttpClient工具类入门_第1张图片

3.1核心API的作用: 

  • HttpClient 提供了发送 HTTP 请求和处理响应的核心功能。
  • HttpClients 是一个工具类,用于创建 HttpClient 实例。
  • CloseableHttpClient 是 HttpClient 的一个实现类,提供了关闭连接和释放资源的能力。
  • HttpGet 是用于发送 GET 请求的类,可以设置请求的 URL、请求头、请求参数等。
  • HttpPost 是用于发送 POST 请求的类,可以设置请求的 URL、请求头、请求参数、请求体等。

 四:入门案例:

4.1使用HttpClient发送GET请求

注:提前开启了/user/shop/status路径可以访问的服务,以保证请求发出可以得到响应

/**
     * 测试通过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工具类入门_第2张图片 

 4.2使用HttpClient发送POST请求

注:提前开启了/admin/employee/login路径可以访问的服务,以保证请求发出可以得到响应 

/**
     * 测试通过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();
    }

 

 五:HttpClient与RestTemplate的对比:

HttpClient 和 RestTemplate 都是 Java 中用于发送 HTTP 请求的工具类,它们的功能类似,但有一些区别和不同的使用场景。

HttpClient 是 Apache HttpComponents 客户端库的核心类,是一个成熟的、稳定的 HTTP 客户端工具,提供了丰富的 API,支持多种协议,如 HTTP/1.1、HTTP/2、HTTPS、FTP 等。在实际项目中,HttpClient 性能较好,可满足大部分的 HTTP 通信需求。

RestTemplate 是 Spring Framework 中的一个工具类,是基于 HttpClient 封装的一套 RESTful 风格的 HTTP 客户端,用于简化发送 HTTP 请求的操作。它提供了多种便捷的方法,例如 GET、POST、PUT、DELETE 等,可以通过 URL 或 URI 发送请求,并将响应的结果转换为指定的 Java 对象。由于其集成于 Spring Framework 中,支持自动注入和其他 Spring 特性,因此在 Spring 项目中使用更加方便。

相对于 HttpClient,RestTemplate 具有以下优点

  • RestTemplate 已经封装了 HttpClient 的大部分功能,使用起来更加简单方便。
  • RestTemplate 集成于 Spring Framework 中,可以与 Spring 的其他组件无缝衔接,更加适合在 Spring 项目中使用。

但也有一些需要注意的缺点

  • RestTemplate 依赖于 Spring 框架,如果项目不使用 Spring,就不能使用 RestTemplate。
  • RestTemplate 的封装也带来了一定的性能损失。

综上所述,如果你在一个 Spring 项目中使用 HTTP 客户端,则建议使用 RestTemplate;如果你需要在非 Spring 项目中使用 HTTP 客户端,或者需要更高的性能,则可以考虑使用 HttpClient。

你可能感兴趣的:(spring,boot,http)