1、config
@Autowired
private RegistryBuilder registryBuilder;
@Bean
public PoolingHttpClientConnectionManager httpClientConnectionManager(){
PoolingHttpClientConnectionManager clientConnectionManager = new PoolingHttpClientConnectionManager(registryBuilder.build());
clientConnectionManager.setDefaultConnectionConfig(ConnectionConfig.custom().build());
clientConnectionManager.setDefaultSocketConfig(SocketConfig.custom().build());
return clientConnectionManager;
}
@Bean
public RegistryBuilder registryBuilder() {
RegistryBuilder registryBuilder = RegistryBuilder.create();
ConnectionSocketFactory plainSF = new PlainConnectionSocketFactory();
registryBuilder.register("http", plainSF);
//指定信任密钥存储对象和连接套接字工厂
try {
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(trustStore, new AnyTrustStrategy()).build();
HostnameVerifier hostnameVerifier = new TrustAnyHostnameVerifier();
LayeredConnectionSocketFactory sslSF = new SSLConnectionSocketFactory(sslContext, hostnameVerifier);
registryBuilder.register("https", sslSF);
} catch (KeyStoreException e) {
logger.error("", e);
} catch (KeyManagementException e) {
logger.error("", e);
} catch (NoSuchAlgorithmException e) {
logger.error("", e);
} catch (Exception e) {
logger.error("", e);
}
return registryBuilder;
}
private static class AnyTrustStrategy implements TrustStrategy {
@Override
public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
return true;
}
}
private static class TrustAnyHostnameVerifier implements HostnameVerifier {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
}
2、调用
@Autowired
private PoolingHttpClientConnectionManager httpClientConnectionManager;
public String doPost(String reqUrl, String reqBody) {
try {
HttpClient httpClient = HttpClientBuilder.create().setConnectionManager(httpClientConnectionManager).build();
HttpPost uriRequest = new HttpPost(reqUrl);
uriRequest.addHeader(HttpHeaders.CONTENT_TYPE, "application/json;charset=UTF-8");
HttpEntity httpEntity = new StringEntity(reqBody, StandardCharsets.UTF_8);
uriRequest.setEntity(httpEntity);
HttpResponse httpResponse = httpClient.execute(uriRequest);
if (httpResponse != null){
HttpEntity responseEntity = httpResponse.getEntity();
if (responseEntity != null){
return EntityUtils.toString(responseEntity, StandardCharsets.UTF_8);
}
}
}catch (Exception e){
logger.error("", e);
}
}