in common/src/main/java/org/jetbrains/teamcity/vault/support/ClientHttpRequestFactoryFactory.java [81:124]
static ClientHttpRequestFactory usingHttpComponents(@NotNull ClientOptions options,
@Nullable SSLTrustStoreProvider trustStoreProvider) throws GeneralSecurityException {
HttpClientBuilder httpClientBuilder = HttpClients.custom();
httpClientBuilder.setRoutePlanner(new SystemDefaultRoutePlanner(
DefaultSchemePortResolver.INSTANCE, ProxySelector.getDefault()));
KeyStore trustStore = trustStoreProvider != null ? trustStoreProvider.getTrustStore() : null;
if (trustStore != null) {
SSLContext sslContext = SSLContextUtil.createUserSSLContext(trustStore);
if (sslContext == null) {
throw new GeneralSecurityException("Error creating extended trusted SSL certificates store");
}
SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext);
httpClientBuilder.setSSLSocketFactory(sslSocketFactory);
httpClientBuilder.setSslcontext(sslContext);
}
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout((int) options.getConnectionTimeout().toMillis())
.setSocketTimeout((int) options.getReadTimeout().toMillis())
.setAuthenticationEnabled(true)
.build();
httpClientBuilder.setDefaultRequestConfig(requestConfig);
// Support redirects
httpClientBuilder.setRedirectStrategy(new LaxRedirectStrategy());
// Fix weird problem `ProtocolException: Content-Length header already present` from `org.apache.http.protocol.RequestContent`
httpClientBuilder.addInterceptorFirst(new HttpRequestInterceptor() {
@Override
public void process(HttpRequest request, HttpContext context) {
if (request instanceof HttpEntityEnclosingRequest) {
request.removeHeaders(HTTP.TRANSFER_ENCODING);
request.removeHeaders(HTTP.CONTENT_LEN);
}
}
});
return new HttpComponentsClientHttpRequestFactory(httpClientBuilder.build());
}