skip to Main Content

I am trying to create one http client using useSystemProperties() as i need to default the ssl properties to that of WAS [like to get the WAS ciphers in runtime ]. And I have to set some max connections and connection manager also to the httpclient. This is a very high traffic rest call.

I have tried 3 ways,

 -- This did not set the WAS ssl properties and thus the connection got failed.
httpclient = HttpClients.custom().useSystemProperties()
                        .setConnectionManager("some value")
                        .setMaxConnPerRoute("some value")
                        .setMaxConnTotal("some value")
                        .setUserAgent("Custom Browser")
                        .disableCookieManagement().build();

 -- This did not set the WAS ssl properties and thus the connection failed.
httpclient1 = HttpClientBuilder.create().useSystemProperties()
                               .setConnectionManager(connManager)
                               .setMaxConnPerRoute(maxConnPerRoute)
                               .setMaxConnTotal(maxConnTotal)
                               .setUserAgent("Custom Browser")
                               .disableCookieManagement().build();

-- This one defaulted to WAS ssl configurations and connection was fine but other params are missing here.
httpclient2 = HttpClientBuilder.create().useSystemProperties().build();

Can I really achieve both these options?

2

Answers


  1. You would need to override the SSLConnectionSocketFactory for your ConnectionManager, for example, on the example below will be created default SSLConnectionSocketFactory if you would use useSystemProperties

        DefaultHostnameVerifier hostnameVerifier = new DefaultHostnameVerifier(PublicSuffixMatcherLoader.getDefault());
        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(
                (SSLSocketFactory) SSLSocketFactory.getDefault(), null, null, hostnameVerifier
        );
    
        final PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(
                RegistryBuilder.<ConnectionSocketFactory>create()
                        .register("http", PlainConnectionSocketFactory.getSocketFactory())
                        .register("https", sslConnectionSocketFactory)
                        .build()
        );
    
        connManager.setDefaultMaxPerRoute(20);
        connManager.setMaxTotal(20);
    
    
        final HttpClientBuilder builder = HttpClientBuilder
                .create()
                .setConnectionManager(connManager);
    
    Login or Signup to reply.
  2. You can also set useSystemProperties() as below to your HttpClient:

    HttpClient httpClient = HttpClientBuilder.create()
                .setConnectionManager(connectionManager)
                .useSystemProperties()
                .setDefaultRequestConfig(requestConfig).build();
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search