我正在寻找一种使用HttpClient
的单个实例为Apache PoolingHttpClientConnectionManager
动态应用不同的证书接受策略(通常只是“ require”或“ ignore”)的好方法。
在很多地方都描述了采用单一接受策略的案例,例如:
但是我没有找到关于PoolingHttpClientConnectionManager涉及不同策略的文章。
我目前对单一(“忽略”)政策的逻辑是:
//Initialization
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder
.<ConnectionSocketFactory> create().register("https", sslsfIgnoringCertificates).register("http", plainsf)
.build();
poolingConnManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
builder = HttpClientBuilder.create();
builder.setConnectionManager(this.poolingConnManager);
rc=RequestConfig.custom().”setAsNeeded”();
this.builder.setDefaultRequestConfig(rc);
,并在需要时通过以下方式生成CloseableHttpClient:
public CloseableHttpClient getClient( ) {
return builder.build();
}
我正在寻找的理想解决方案是使用策略类型作为参数并返回不同类型的客户端的getClient(policy)
的新版本,但是它们所有人都管理{{ 1}}
实现此目标的最佳方法是什么?如果可能的话,我想在PoolingHttpClientConnectionManager;
使用的TrustStrategy和HostnameVerifier的实现中避免任何“每主机”逻辑
是否可以在SSLConnectionSocketFactory sslsf;
中注册多个SSLConnectionSocketFactory实例(例如[“ https”,“ https1”,“ http”]而不是仅使用[“ https”,“ http”]),并使用以下方法动态构建CloseableHttpClient选择了SSLConnectionSocketFactory?