# javaHttpClient **Repository Path**: Elin159/javaHttpClient ## Basic Information - **Project Name**: javaHttpClient - **Description**: 进一步利用httpClient池,更加方便开发人员调用httpClient方法 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2020-05-07 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # javaHttpClient #### 前期准备 需安装httpclient库, maven版本 ```xml org.apache.httpcomponents httpclient ``` #### 介绍 基于**springBoot**下整合httpClient, 对httpClient提供的线程池进行封装, 对httpClient发起请求的方法进行进一步封装,利用ThreaLocal保证数据隔离,保证线程安全 增加对rest部分请求支持, 暂时支持GET, POST, PUT, PATCH, DELETE 需要jdk8及以上 #### 说明 本功能只属于初版,暂时没经过线上测试,暂时只对较为基础的请求方式进行封装,暂时不支持发送raw等其它特殊操作,底层暂时使用x-www-form-urlencoded进行连接进行数据传输,暂不支持发送文件 目录结构 ``` |-- httpclient |--- HttpClientClose.java 对客户端资源释放规则 |--- HttpClientConfig.java 客户端配置 |--- HttpClientRequestMethod.java 请求方法的enum |--- HttpClientService.java 封装前的客户端请求核心服务 |--- HttpClientServiceFactory.java 封装优化后的客户端请求核心服务 ``` 使用方式: 1. 设置springBoot配置文件yml ```yml utils: http: max-total: 1000 #最大连接数 default-max-per-route: 20 #并发数 connect-timeout: 5000 # 创建连接的最长时间 connection-request-timeout: 500 # 从连接池中获取到连接的最长时间 statle-connection-check-enabled: true #提交请求前测试连接是否可用 socket-timeout: 5000 # 数据传输的最长时长 ``` 2. 自动注入客户端及请求配置项 ```java @Autowired private CloseableHttpClient httpClient; @Autowired private RequestConfig requestConfig; ``` 3. 注入客户端请求服务 ```java @Autowired HttpClientServiceFactory httpClient; ``` 4. 发起请求 ```java ConcurrentHashMap params = new ConcurrentHashMap<>(); ConcurrentHashMap headers = new ConcurrentHashMap<>(); headers.put("token","eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIxIn0.7rEsEeXWofvw93g8HOfYEC0aeT7ccPuqlfMc1nuGHCU"); params.put("valid", "1"); String result = (String) httpClient .setMethod(HttpClientRequestMethod.GET) .setHeaders(headers) .setUrl("http://localhost:8088/user") .setParams(params) .reduce(httpClient::getResult); // String result = (String) httpClient // .setMethod(HttpClientRequestMethod.PATCH) // .setUrl("http://localhost:8088/user/1") // .setParams(params) // .reduce(httpClient::getResult); System.out.println(result); ```` #### 总结 通过链式调用将可发起请求,**参数(setParams)**、**头部(setHeaders)** 可缺省调用, reduce将 处理响应数据 进行解藕,可自定义不同的处理方法进行调用(jdk8的FunctionalInterface)。