近日在工作中遇到了这种场景:调用的第三方接口只开放了443端口,但又没有域名和证书,我只能通过https://ip的方式访问。curl可以通过-k跳过证书校验,如果用apache httpclient如何跳过证书校验这一步呢?
如果不使用连接池:
public static CloseableHttpClient createHttpClient() {
try {
SSLContext sslContext = SSLContextBuilder.create()
.loadTrustMaterial((chain, authType) -> true)
.build();
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
return HttpClients.custom().setSSLSocketFactory(socketFactory).build();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
如果使用连接池:
public static CloseableHttpClient createHttpClient() {
try {
SSLContext sslContext = SSLContextBuilder.create()
.loadTrustMaterial((chain, authType) -> true)
.build();
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
PoolingHttpClientConnectionManager poolManager = new PoolingHttpClientConnectionManager(RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", socketFactory)
.build());
return HttpClients.custom().setSSLSocketFactory(socketFactory).setConnectionManager(poolManager).build();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}