阐述使用 HttpClient 进行 http 请求

1 概述

(1)HTTPClient 实现了所有 HTTP 的方法(包括 GET、POST、PUT、DELETE、OPTIONS

等),使用该工具包可以很方便的发起http请求。

(2)Maven 依赖

bash 复制代码
<dependency>
    <groupId>org.apache.httpcomponents.client5</groupId>
    <artifactId>httpclient5</artifactId>
    <version>5.3</version>
</dependency>

(3)执行http请求的步骤如下:

  • 创建 HttpClient 实例
  • 创建请求实例(如 HttpGet)
  • 执行请求
  • 处理响应结果
  • 关闭连接(释放资源)

2 Http接口案例

下面是几个 Http 接口。后续接口调用案例将调用下述接口。

java 复制代码
@RestController
@RequestMapping("/request")
public class RequestTestController {


    @GetMapping("/getWithoutParam")
    public String getWithoutParam() {
        return "data_getWithoutParam";
    }

    @GetMapping("/getWithParam")
    public String getWithParam(String param, String param2) {
        return "data_getWithParam_" + param + "_" + param2;
    }

    @PostMapping("/postWithoutParam")
    public String postWithoutParam() {
        return "data_postWithoutParam";
    }

    @PostMapping("/postWithParam")
    public String postWithParam(@RequestBody PostWithParamDto param) {
        return "data_postWithParam_" + param.getParam() + "_" + param.getParam2();
    }

    @Data
    public static class PostWithParamDto {
        private String param;
        private String param2;
    }

}

3 get请求

下面是 get 请求的调用方式,分别为调用无入参和有入参的 get 接口。

3.1 get 无参

java 复制代码
    /**
     * get 无参
     */
    public void getWithoutParam() {
        CloseableHttpResponse response = null;
        // 创建 httpClient 实例
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 创建请求实例
        HttpGet httpGet = new HttpGet("http://127.0.0.1:8080/request/getWithoutParam");
        try {
            // 执行请求
            response = httpClient.execute(httpGet);
            // 处理响应结果
            if (response.getStatusLine().getStatusCode() != 200) {
                log.error("http getWithoutParam error. response:{}", JSON.toJSONString(response));
                return;
            }

            String resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
            log.info("http getWithoutParam result:{}", JSON.toJSONString(resultString));
        } catch (Exception e) {
            log.error("http getWithoutParam error", e);
        } finally {
            // 关闭连接
            try {
                if (response != null) {
                    response.close();
                }
                httpClient.close();
            } catch (Exception e) {
                log.error("http getWithoutParam error", e);
            }
        }
    }

3.2 get 有参

java 复制代码
    public void getWithParam() {
        CloseableHttpResponse response = null;
        // 创建 httpClient 实例
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 创建请求实例
        StringBuilder stringBuilder = new StringBuilder();
        try {
            stringBuilder.append("param=").append(URLEncoder.encode("123", "utf-8"));
            stringBuilder.append("&");
            stringBuilder.append("param2=").append(URLEncoder.encode("456", "utf-8"));
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }

        HttpGet httpGet = new HttpGet("http://127.0.0.1:8080/request/getWithParam?"+stringBuilder);
        try {
            // 执行请求
            response = httpClient.execute(httpGet);
            // 处理响应结果
            if (response.getStatusLine().getStatusCode() != 200) {
                log.error("http getWithParam error. response:{}", JSON.toJSONString(response));
                return;
            }

            String resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
            log.info("http getWithParam result:{}", JSON.toJSONString(resultString));
        } catch (Exception e) {
            log.error("http getWithParam error", e);
        } finally {
            // 关闭连接
            try {
                if (response != null) {
                    response.close();
                }
                httpClient.close();
            } catch (Exception e) {
                log.error("http getWithParam error", e);
            }
        }
    }

4 post 请求

下面是 post 请求的调用方式,分别为调用无入参和有入参的 post 接口。

4.1 post 无参

java 复制代码
    public void postWithoutParam() {
        CloseableHttpResponse response = null;
        // 创建 httpClient 实例
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 创建请求实例
        HttpPost httpPost = new HttpPost("http://127.0.0.1:8080/request/postWithoutParam");
        try {
            // 执行请求
            response = httpClient.execute(httpPost);
            // 处理响应结果
            if (response.getStatusLine().getStatusCode() != 200) {
                log.error("http postWithoutParam error. response:{}", JSON.toJSONString(response));
                return;
            }

            String resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
            log.info("http postWithoutParam result:{}", JSON.toJSONString(resultString));
        } catch (Exception e) {
            log.error("http postWithoutParam error", e);
        } finally {
            // 关闭连接
            try {
                if (response != null) {
                    response.close();
                }
                httpClient.close();
            } catch (Exception e) {
                log.error("http postWithoutParam error", e);
            }
        }
    }

4.2 post 有参

java 复制代码
    public void postWithParam() {
        CloseableHttpResponse response = null;
        // 创建 httpClient 实例
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 创建请求实例
        HttpPost httpPost = new HttpPost("http://127.0.0.1:8080/request/postWithParam");
        // 接口请求参数 PostWithParamDto
        PostWithParamDto postWithParamDto = new PostWithParamDto();
        postWithParamDto.setParam("123");
        postWithParamDto.setParam2("456");
        StringEntity entity = new StringEntity(JSON.toJSONString(postWithParamDto), "UTF-8");
        httpPost.setEntity(entity);
        httpPost.setHeader("Content-Type", "application/json;charset=utf8");
        try {
            // 执行请求
            response = httpClient.execute(httpPost);
            // 处理响应结果
            if (response.getStatusLine().getStatusCode() != 200) {
                log.error("http postWithParam error. response:{}", JSON.toJSONString(response));
                return;
            }

            String resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
            log.info("http postWithParam result:{}", JSON.toJSONString(resultString));
        } catch (Exception e) {
            log.error("http postWithParam error", e);
        } finally {
            // 关闭连接
            try {
                if (response != null) {
                    response.close();
                }
                httpClient.close();
            } catch (Exception e) {
                log.error("http postWithParam error", e);
            }
        }
    }

    @Data
    public static class PostWithParamDto {
        private String param;
        private String param2;
    }

5 参考文献

(1)HttpClient详细使用示例

相关推荐
一曝十寒40 分钟前
那些常见的 HTTP 状态码
前端·http
酷爱码5 小时前
在 Linux 中修改 Apache HTTP Server(httpd)默认端口的完整指南
linux·http·apache
程序员祥云5 小时前
https相比http的区别
网络协议·http·https
小吕学编程7 小时前
HttpServletRequest常用方法
java·http
2501_915106328 小时前
Flutter、React Native 项目如何搞定 iOS 上架?从构建 IPA 到上传 App Store 的实战流程全解析
websocket·网络协议·tcp/ip·http·网络安全·https·udp
snetlogon209 小时前
JDK17 Http Request 异步处理 源码刨析
android·网络协议·http
秋水丶秋水13 小时前
SSL安全证书怎么安装?
网络协议·http·https
midsummer_woo21 小时前
【2025年】解决Burpsuite抓不到https包的问题
网络协议·http·https
猫头虎1 天前
[特殊字符]解决 “IDEA 登录失败。不支持早于 14.0 的 GitLab 版本” 问题的几种方法
java·ide·网络协议·http·https·gitlab·intellij-idea
扣丁梦想家1 天前
✅ 常用 Java HTTP 客户端汇总及使用示例
java·开发语言·http