# 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)。