On Wed, 2018-05-16 at 15:56 +0000, Daly, Paul wrote:
> I canot speak for HttpClient5, but If you are just looking to change
> some timeouts on the request, in 4.5.5, I do this (as recommended
> from this emai list some time ago!).
> 
> I guess its not too differenent for HC5 (?)
> 
> 
> - Create a shared HTTPClient instance. this is used by all requests
> in the JVM and is instantiated on first use.
> - each request (thread) grabs the shared client (it is thread safe)
> - each request (thread) creates its own request context
> - set the request type specific timeout on the request context (note
> internally in our app we apply different timeouts depending on
> several factors (message type,client etc))
> - execute the request on the shared client with the request context
> 
> Seems to work fine...
> 

+1. Precisely how it was intended.

Oleg

> Some snippets
> 
> // in a client factory class I create the client based on sensible
> timeout defaults
> // this populates a static httpclient which can be returned by a
> static getClient method to all threads needing a httpClient
> CloseableHttpClient newClient =
> HttpClientBuilder.create().useSystemProperties()
>               .setDefaultRequestConfig(config).setMaxConnPerRoute(max
> ConnectionsPerRoute)
>               .setMaxConnTotal(totalMaxConnection).evictExpiredConnec
> tions()
>               .evictIdleConnections(idleLife,
> TimeUnit.MINUTES).setConnectionTimeToLive(maxLife, TimeUnit.MINUTES)
>               .build();
> 
> 
> statichttpClient = newClient;
> 
> 
> // within the request
> httpClient = HttpClientFactory.getClient();
> 
> // create the context for this thread
> HttpClientContext httpContext = HttpClientContext.create();
> httpContext.setRequestConfig(getRequestConfig());
> HttpResponse serviceResponse = httpClient.execute(httpRequest,
> httpContext);
> 
> 
> // make the request config
> private RequestConfig getRequestConfig() throws
> PCEConfigParamNotFoundException {
> 
> // setup request timeouts
> return RequestConfig.custom().setConnectionRequestTimeout(aaa).
> setConnectTimeout(bbb). setSocketTimeout(ccc).build();
> }
> 
> 
> 
> 
> 
> 
> 
> -----Original Message-----
> From: / [mailto:isla...@yahoo.co.uk.INVALID] 
> Sent: Wednesday, May 16, 2018 4:01 PM
> To: httpclient-users@hc.apache.org
> Subject: Re: Fwd: HttpClient5 : simple example on how to configure
> timeout after build()
> 
> Thanks,
> 
> if I understood correctly, the pattern should be:
> 
> 1) Create a RequestConfig (rc) object and keep it.
> 2) If you need to modify httpclient, modify the kept RequestConfig
> object
> 3) After doing said modifications **re-create httpclient** with kept 
> RequestConfig.
> 4) Keep the RequestConfig.
> 5) Keeping a client and modifying it as see fit is/will be
> deprecated.
> 
> Questions:
> can I extract a RequestConfig from current client, modify its
> timeout 
> and then re-create a client with this cloned-and-modified
> RequestConfig? 
> (so as not to keep a RequestConfig at all but remember all the
> settings 
> I did to my client).
> 
> 
> 
> thanks
> 
> On 16/05/18 17:42, Shawn Heisey wrote:
> > On 5/16/2018 8:09 AM, / wrote:
> > > I am looking for an example on how to configure HttpClient5 after
> > > it 
> > > has been built and how to extract/print some of its
> > > configuration.
> > > 
> > > Once I have an HttpClient object, how do I go about and change
> > > some of 
> > > its settings, for example connection timeout or user-agent-string 
> > > or 
> > > even cookie jar?
> > > 
> > > I am looking for the most straight-forward and efficient way to
> > > do 
> > > this. I don't care about "fluent" APIs neither about streams etc.
> > > 
> > > something like:
> > > 
> > > myclient.setParameter(connection_timeout, 1000); 
> > 
> > For the most part, you can't change settings on an existing
> > HttpClient 
> > object.  Since about 4.3, the objects and methods that allow
> > clients to 
> > be changed after creation are all deprecated. That capability is 
> > completely gone in 5.x.  Default settings are managed with builder 
> > objects using fluent methods, then you create the client object
> > with the 
> > indicated settings.  Here's how I create a client object with
> > explicit 
> > defaults using non-deprecated code in the 4.5 version:
> > 
> >    RequestConfig rc =
> > RequestConfig.custom().setConnectTimeout(15000)
> >            .setSocketTimeout(120000).build();
> >    httpClient = HttpClients.custom().setDefaultRequestConfig(rc)
> > .setMaxConnPerRoute(300).setMaxConnTotal(5000).disableAutomaticRetr
> > ies()
> >            .build();
> > 
> > The httpClient field is an instance of HttpClient.  I do not know
> > what 
> > kind of adjustments might need to be made for 5.x, but that should
> > give 
> > you an idea about how things are done since the way you're trying
> > to do 
> > it is no longer available.
> > 
> > Many of the settings you might be interested in can also be changed
> > at 
> > the request level.  I do not know HOW to do this, only that it CAN
> > be 
> > done.  I think this is what Oleg was referring to in his reply.
> > 
> > Thanks,
> > Shawn
> > 
> > 
> > -----------------------------------------------------------------
> > ----
> > To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org
> > For additional commands, e-mail: httpclient-users-h...@hc.apache.or
> > g
> > 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org
> For additional commands, e-mail: httpclient-users-h...@hc.apache.org
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org
> For additional commands, e-mail: httpclient-users-h...@hc.apache.org
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org
For additional commands, e-mail: httpclient-users-h...@hc.apache.org

Reply via email to