public class HttpClientUtil {
private final static Logger log = LoggerFactory.getLogger(HttpClientUtil.class);
/**
* 发送请求后的状态码
*/
private static final int CODE = 200;
/**
* 线程池管理
*/
private static final PoolingHttpClientConnectionManager POOL_HTTP_CON_MANAGER;
/**
* 请求器配置
*/
private static final RequestConfig REQUEST_CONFIG;
private static final CloseableHttpClient HTTP_CLIENT;
static {
POOL_HTTP_CON_MANAGER = new PoolingHttpClientConnectionManager();
//最大连接数
POOL_HTTP_CON_MANAGER.setMaxTotal(10);
//路由基数
POOL_HTTP_CON_MANAGER.setDefaultMaxPerRoute(10);
REQUEST_CONFIG = RequestConfig.custom()
//从连接池中取连接的超时时间
.setConnectionRequestTimeout(6000)
//连接超时时间
.setConnectTimeout(6000)
//请求超时时间
.setSocketTimeout(6000).build();
HTTP_CLIENT = getConnection();
}
public static CloseableHttpClient getConnection() {
CloseableHttpClient httpClient = HttpClients.custom()
// 设置连接池管理
.setConnectionManager(POOL_HTTP_CON_MANAGER)
// 设置请求配置
.setDefaultRequestConfig(REQUEST_CONFIG)
// 设置重试次数
.setRetryHandler(new DefaultHttpRequestRetryHandler(0, false))
.build();
if (POOL_HTTP_CON_MANAGER != null && POOL_HTTP_CON_MANAGER.getTotalStats() != null) {
log.info("创建新 client pool {}", POOL_HTTP_CON_MANAGER.getTotalStats().toString());
}
return httpClient;
}
public static JSONObject doGet(String url) {
JSONObject jsonObject = new JSONObject();
CloseableHttpResponse response = null;
try {
//设置请求地址,创建 URIBuilder
URIBuilder uriBuilder = new URIBuilder(url);
HttpGet httpGet = new HttpGet(uriBuilder.build());
// 配置请求信息
httpGet.setConfig(REQUEST_CONFIG);
//发起请求
response = HTTP_CLIENT.execute(httpGet);
if (response.getStatusLine().getStatusCode() == CODE) {
HttpEntity entity = response.getEntity();
String json = EntityUtils.toString(entity, "utf-8");
jsonObject = JSONObject.parseObject(json);
log.info("请求url:{}后,返回的数据:{}", url, json);
}
} catch (URISyntaxException | IOException e) {
e.printStackTrace();
} finally {
try {
if (response != null) {
response.close();
log.info("关闭连接请求!");
}
} catch (IOException e) {
log.error("关闭发送请求失败!");
e.printStackTrace();
}
}
return jsonObject;
}
public static JSONObject doPost(String url, String params) {
JSONObject jsonObject = new JSONObject();
CloseableHttpResponse response = null;
try {
//设置请求地址,创建 URIBuilder
URIBuilder uriBuilder = new URIBuilder(url);
log.info("请求地址:{}{}", uriBuilder.getHost(), uriBuilder.getPath());
HttpPost httpPost = new HttpPost(uriBuilder.build());
// 配置请求信息
httpPost.setConfig(REQUEST_CONFIG);
//封装请求参数
if (StringUtils.isNotBlank(params)) {
log.info("有参数请求:{}", params);
StringEntity stringEntity = new StringEntity(params, "UTF-8");
stringEntity.setContentEncoding("UTF-8");
stringEntity.setContentType("application/json");
httpPost.setEntity(stringEntity);
}
//发起请求
response = HTTP_CLIENT.execute(httpPost);
HttpEntity entity = response.getEntity();
String str = EntityUtils.toString(entity, "utf-8");
jsonObject = JSONObject.parseObject(str);
} catch (URISyntaxException | IOException e) {
log.error("发送请求失败.....");
e.printStackTrace();
} finally {
try {
if (response != null) {
response.close();
log.info("关闭连接请求!");
}
} catch (IOException e) {
log.error("关闭发送请求失败!");
e.printStackTrace();
}
}
log.info("请求接口返回的数据:{}", jsonObject.toJSONString());
return jsonObject;
}
public static Map<String, String> getToken(String url) {
Map<String, String> rs = new HashMap<>(2);
rs.put("token", "");
rs.put("time", "0");
CloseableHttpResponse response = null;
try {
//设置请求地址,创建 URIBuilder
URIBuilder uriBuilder = new URIBuilder(url + "/oauth/token");
log.info("请求地址:{}{}", uriBuilder.getHost(), uriBuilder.getPath());
//获取token的参数
List<NameValuePair> nvp = new ArrayList<>();
uriBuilder.setParameters(nvp);
// 创建post 请求
HttpPost httpPost = new HttpPost(uriBuilder.build());
// 配置请求信息
httpPost.setConfig(REQUEST_CONFIG);
//发起请求
response = HTTP_CLIENT.execute(httpPost);
if (response.getStatusLine().getStatusCode() == CODE) {
HttpEntity entity = response.getEntity();
JSONObject parse = JSONObject.parseObject(EntityUtils.toString(entity, "utf-8"));
String author = parse.getString("access_token");
String time = parse.getString("expires_in");
author = String.format("%s %s", "Bearer", author);
rs.put("token", author);
rs.put("time", time);
log.info("已获取token:{}", author);
} else {
log.info("请求获取token失败!");
}
} catch (URISyntaxException | IOException e) {
log.error("发送请求失败.....");
e.printStackTrace();
} finally {
try {
if (response != null) {
response.close();
log.info("关闭连接请求!");
}
} catch (IOException e) {
log.error("关闭发送请求失败!");
e.printStackTrace();
}
}
return rs;
}
}