private PoolingHttpClientConnectionManager poolConnManager;
private RequestConfig requestConfig;
private CloseableHttpClient httpClient;
/**
* 配置http
* @param httpRequestBase
*/
private static void config(HttpRequestBase httpRequestBase) {
RequestConfig requestConfig = RequestConfig.custom()
.setConnectionRequestTimeout(20000)
.setConnectTimeout(20000)
.setSocketTimeout(20000).build();
httpRequestBase.addHeader("Content-Type", "application/json;charset=UTF-8");
httpRequestBase.setConfig(requestConfig);
}
/**
* 初始化
*/
private void initPool() {
try {
SSLContextBuilder builder = new SSLContextBuilder();
builder.loadTrustMaterial(null, new TrustSelfSignedStrategy());
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(builder.build());
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create().register(
"http", PlainConnectionSocketFactory.getSocketFactory()).register(
"https", sslsf).build();
poolConnManager = new PoolingHttpClientConnectionManager(
socketFactoryRegistry);
poolConnManager.setMaxTotal(200);
poolConnManager.setDefaultMaxPerRoute(200);
int socketTimeout = 10000;
int connectTimeout = 10000;
int connectionRequestTimeout = 10000;
requestConfig = RequestConfig.custom().setConnectionRequestTimeout(
connectionRequestTimeout).setSocketTimeout(socketTimeout).setConnectTimeout(
connectTimeout).build();
httpClient = getConnection();
} catch (NoSuchAlgorithmException | KeyStoreException | KeyManagementException e) {
e.printStackTrace();
}
}
private CloseableHttpClient getConnection() {
CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(poolConnManager)
.setDefaultRequestConfig(requestConfig)
.setRetryHandler(new DefaultHttpRequestRetryHandler(0, false))
.build();
return httpClient;
}
public String post(String url, Map<String, Object> requestData) {
HttpPost httpPost = new HttpPost(url);
config(httpPost);
StringEntity stringEntity = new StringEntity(JSON.toJSONString(requestData), "UTF-8");
stringEntity.setContentEncoding(Charsets.UTF_8.toString());
httpPost.setEntity(stringEntity);
return getResponse(httpPost);
}
public String post(String url, String requestData) throws MalformedURLException, UnsupportedEncodingException {
HttpPost httpPost = new HttpPost(url);
config(httpPost);
StringEntity stringEntity = new StringEntity(requestData, Charsets.UTF_8.toString());
stringEntity.setContentEncoding("UTF-8");
httpPost.setEntity(stringEntity);
String result = getResponse(httpPost);
return result;
}
/**
* 发送http delete请求
*/
public static String delete(String url, Map<String, String> headers) {
String result = null;
// since 4.3 不再使用 DefaultHttpClient
CloseableHttpClient closeableHttpClient = HttpClientBuilder.create().build();
HttpDelete httpdelete = new HttpDelete(url);
// 设置header
if (headers != null && headers.size() > 0) {
for (Map.Entry<String, String> entry : headers.entrySet()) {
httpdelete.setHeader(entry.getKey(), entry.getValue());
}
}
CloseableHttpResponse httpResponse = null;
try {
httpResponse = closeableHttpClient.execute(httpdelete);
HttpEntity entity = httpResponse.getEntity();
result = EntityUtils.toString(entity, "UTF-8");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (httpResponse != null) {
httpResponse.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
try { // 关闭连接、释放资源
closeableHttpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
*
* @param url
* @throws
*/
public static String put(String url, String body) {
String result = "";
try {
HttpPut httpPut = new HttpPut(url);
httpPut.addHeader("Accept-Language", LocaleContextHolder.getLocale().getLanguage());
if (StringUtils.isNotBlank(body)) {
HttpEntity entity = new StringEntity(body, ContentType.create("application/json", "UTF-8"));
httpPut.setEntity(entity);
}
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
CloseableHttpResponse response = httpClient.execute(httpPut);
HttpEntity entity = response.getEntity();
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
result = EntityUtils.toString(entity, "UTF-8");
response.close();
httpClient.close();
} else {
result = EntityUtils.toString(entity, "UTF-8");
response.close();
httpClient.close();
throw new IllegalArgumentException(result);
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public String doPost(String url, byte[] fileBytes, String fileName) {
HttpPost httpPost = new HttpPost(url);
config(httpPost);
//boundary代表我们规定的分割符,可以自己任意规定,但为了避免和正常文本重复了,尽量要使用复杂一点的内容。如:--------------------56423498738365
String boundary = "--------------4585696313564699";
httpPost.setHeader("Content-Type", "multipart/form-data; boundary=" + boundary);
String strResult = "";
try {
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setCharset(Charset.forName("UTF-8"));
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.setBoundary(boundary);
builder.addBinaryBody("file", fileBytes, ContentType.DEFAULT_BINARY, fileName);
HttpEntity entity = builder.build();
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost);
HttpEntity responseEntity = response.getEntity();
if (responseEntity != null) {
strResult = EntityUtils.toString(responseEntity, Charsets.UTF_8);
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return strResult;
}
public String get(String url) {
HttpGet httpGet = new HttpGet(url);
config(httpGet);
return getResponse(httpGet);
}
private String getResponse(HttpRequestBase request) {
CloseableHttpResponse response = null;
try {
response = httpClient.execute(request,
HttpClientContext.create());
HttpEntity entity = response.getEntity();
String result = EntityUtils.toString(entity, Charsets.UTF_8);
EntityUtils.consume(entity);
return result;
} catch (IOException e) {
return "send http error"+e;
} finally {
try {
if (response != null) {
response.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void afterPropertiesSet() throws Exception {
initPool();
}
HttpClientPool demo
最新推荐文章于 2021-12-20 22:01:20 发布