Fwd: HttpClient5 : simple example on how to configure timeout after build()
Hi there, 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); or System.out.println(myclient.getParameter(user_agent_string)); is that possible at all? or shall I start prepare for the climb on the long-winded road to the Castle - "oh! howdy Kafka!" ? - To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org For additional commands, e-mail: httpclient-users-h...@hc.apache.org
Re: Fwd: HttpClient5 : simple example on how to configure timeout after build()
On Wed, 2018-05-16 at 17:09 +0300, / wrote: > Hi there, > > 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? > HttpContext is your best friend https://github.com/apache/httpcomponents-client/blob/master/httpclient5 /src/examples/org/apache/hc/client5/http/examples/ClientCustomContext.j ava Any bit of contextual details for request execution should be there (or should go there) Hope this helps. Oleg > 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); > > or > > System.out.println(myclient.getParameter(user_agent_string)); > > is that possible at all? or shall I start prepare for the climb on > the > long-winded road to the Castle - "oh! howdy Kafka!" ? > > - > 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
Re: Fwd: HttpClient5 : simple example on how to configure timeout after build()
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(12).build(); httpClient = HttpClients.custom().setDefaultRequestConfig(rc) .setMaxConnPerRoute(300).setMaxConnTotal(5000).disableAutomaticRetries() .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.org
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(12).build(); httpClient = HttpClients.custom().setDefaultRequestConfig(rc) .setMaxConnPerRoute(300).setMaxConnTotal(5000).disableAutomaticRetries() .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.org - To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org For additional commands, e-mail: httpclient-users-h...@hc.apache.org
RE: Fwd: HttpClient5 : simple example on how to configure timeout after build()
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... 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(maxConnectionsPerRoute) .setMaxConnTotal(totalMaxConnection).evictExpiredConnections() .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(12).build(); > httpClient = HttpClients.custom().setDefaultRequestConfig(rc) > .setMaxConnPerRoute(300).setMaxConnTotal(5000).disableAutomaticRetries() > .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 unsubscrib
Re: Fwd: HttpClient5 : simple example on how to configure timeout after build()
On Wed, 2018-05-16 at 18:01 +0300, / wrote: > 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. Please do not do that. There is no need to re-create the client. If you have a custom RequestConfig, stick it into the request object or the HttpContext associated with it. 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). > RequestConfig used to execute a particular request will be available in the HttpContext. HttpClient instance merely holds default settings. Oleg - To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org For additional commands, e-mail: httpclient-users-h...@hc.apache.org
Re: Fwd: HttpClient5 : simple example on how to configure timeout after build()
On Wed, 2018-05-16 at 15:56 +, 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(1200
Re: Fwd: HttpClient5 : simple example on how to configure timeout after build()
On 5/16/2018 8:42 AM, Shawn Heisey wrote: > RequestConfig rc = RequestConfig.custom().setConnectTimeout(15000) > .setSocketTimeout(12).build(); > httpClient = HttpClients.custom().setDefaultRequestConfig(rc) > .setMaxConnPerRoute(300).setMaxConnTotal(5000).disableAutomaticRetries() > .build(); I have attempted to upgrade httpclient in one of my projects from 4.5.x to the latest 5.0 beta release, and this code no longer compiles. On RequestConfig.Builder, the setSocketTimeout method no longer exists. On HttpClientBuilder, the setMaxConnPerRoute and setMaxConnTotal methods no longer exist. These methods were not deprecated in 4.5.x. Is it still possible to set a socket timeout default? Is it still possible to increase the maximum number of connections that a client can make? If so, how is it done? Thanks, Shawn - To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org For additional commands, e-mail: httpclient-users-h...@hc.apache.org
Re: Fwd: HttpClient5 : simple example on how to configure timeout after build()
Thanks I understand. I would appreciate if some concrete code or pointer to examples is given regarding: 1) Create a shared HTTPClient 2) how a given thread is passed=given the shared client and changes, say, connection timeout AND ALSO its userAgentString. (the userAgentString is not something I want to change but I try to push this to its limit). bw a. On 16/05/18 22:54, Oleg Kalnichevski wrote: On Wed, 2018-05-16 at 15:56 +, 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(12).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.
Re: Fwd: HttpClient5 : simple example on how to configure timeout after build()
On Wed, 2018-05-16 at 14:11 -0600, Shawn Heisey wrote: > On 5/16/2018 8:42 AM, Shawn Heisey wrote: > > RequestConfig rc = > > RequestConfig.custom().setConnectTimeout(15000) > > .setSocketTimeout(12).build(); > > httpClient = HttpClients.custom().setDefaultRequestConfig(rc) > > .setMaxConnPerRoute(300).setMaxConnTotal(5000).disableAutomaticRetr > > ies() > > .build(); > > I have attempted to upgrade httpclient in one of my projects from > 4.5.x > to the latest 5.0 beta release, and this code no longer compiles. On > RequestConfig.Builder, the setSocketTimeout method no longer exists. > On > HttpClientBuilder, the setMaxConnPerRoute and setMaxConnTotal methods > no > longer exist. These methods were not deprecated in 4.5.x. > > Is it still possible to set a socket timeout default? Is it still > possible to increase the maximum number of connections that a client > can > make? If so, how is it done? > > Thanks, > Shawn > Hi Shawn HttpClientBuilder in HC4 got overloaded with so many connection management parameters which could easily get rendered ineffective by explicitly passing an instance of HttpClientConnectionManager to the builder. The same could with HC5 would look like that. --- CloseableHttpClient client = HttpClientBuilder.create() .setConnectionManager(PoolingHttpClientConnectionManagerBuilder.create() .setMaxConnTotal(200) .setMaxConnPerRoute(20) .setDefaultSocketConfig(SocketConfig.custom() .setSoTimeout(Timeout.ofMinutes(1L)) .build()) .build()) .setDefaultRequestConfig(RequestConfig.custom() .setConnectionTimeout(Timeout.ofSeconds(30L)) .build()) .build(); --- Does this help in any way? Oleg - To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org For additional commands, e-mail: httpclient-users-h...@hc.apache.org
Re: Fwd: HttpClient5 : simple example on how to configure timeout after build()
me 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? > > > > > > > &
Re: Fwd: HttpClient5 : simple example on how to configure timeout after build()
e 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(12).build(); httpClient = HttpClients.custom().setDefaultRequestConfig(rc) .setMaxConnPerRoute(300).setMaxConnTotal(5000).disableAutomatic Retr 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-unsubscribe@hc.apache. org For additional commands, e-mail: httpclient-users-help@hc.apach e.or g --- -- To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.or g For additional commands, e-mail: httpclient-users-help@hc.apache. org ---
Re: Fwd: HttpClient5 : simple example on how to configure timeout after build()
On 5/17/2018 3:51 AM, Oleg Kalnichevski wrote: HttpClientBuilder in HC4 got overloaded with so many connection management parameters which could easily get rendered ineffective by explicitly passing an instance of HttpClientConnectionManager to the builder. The same could with HC5 would look like that. Thanks for the information on how to set the parameters I was looking for. I've upgraded to HC5 in one app, and all the tests are still passing. It also seems to work with real traffic. I'm explicitly creating the inner objects rather than building them on the fly like your code example does. Probably no real difference in what actually happens on execution, I just find this code style easier to read. final SocketConfig sc = SocketConfig.custom().setSoTimeout(Timeout.ofSeconds(10)).build(); final HttpClientConnectionManager cm = PoolingHttpClientConnectionManagerBuilder.create() .setMaxConnTotal(1000).setMaxConnPerRoute(200).setDefaultSocketConfig(sc).build(); final RequestConfig rc = RequestConfig.custom().setConnectionTimeout(Timeout.ofSeconds(5)) .build(); final CloseableHttpClient client = HttpClientBuilder.create().setConnectionManager(cm) .setDefaultRequestConfig(rc).build(); Are there any plans to make the creation of builder objects more uniform? Sometimes it's custom(), sometimes it's create().It would be nice if there was consistency. Thanks, Shawn - To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org For additional commands, e-mail: httpclient-users-h...@hc.apache.org
Re: Fwd: HttpClient5 : simple example on how to configure timeout after build()
On Thu, 2018-05-17 at 09:17 -0600, Shawn Heisey wrote: > On 5/17/2018 3:51 AM, Oleg Kalnichevski wrote: > > HttpClientBuilder in HC4 got overloaded with so many connection > > management parameters which could easily get rendered ineffective > > by > > explicitly passing an instance of HttpClientConnectionManager to > > the > > builder. > > > > The same could with HC5 would look like that. > > Thanks for the information on how to set the parameters I was > looking > for. I've upgraded to HC5 in one app, and all the tests are still > passing. It also seems to work with real traffic. > > I'm explicitly creating the inner objects rather than building them > on > the fly like your code example does. Probably no real difference in > what actually happens on execution, I just find this code style > easier > to read. > > final SocketConfig sc = > SocketConfig.custom().setSoTimeout(Timeout.ofSeconds(10)).build(); > final HttpClientConnectionManager cm = > PoolingHttpClientConnectionManagerBuilder.create() > .setMaxConnTotal(1000).setMaxConnPerRoute(200).setDefaultSocketConfig > (sc).build(); > final RequestConfig rc = > RequestConfig.custom().setConnectionTimeout(Timeout.ofSeconds(5)) > .build(); > final CloseableHttpClient client = > HttpClientBuilder.create().setConnectionManager(cm) > .setDefaultRequestConfig(rc).build(); > Hi Shawn > Are there any plans to make the creation of builder objects more > uniform? Sometimes it's custom(), sometimes it's create().It would > be > nice if there was consistency. > Up to this point, config beans used to have #custom method instead of a standalone builder class. All standalone builder classes used to have #create method. This looks consistent enough to be but I am very open to different ideas and tweaking config bean classes. The reason we are having a long BETA phase, so that people could contribute API improvements and changes. Oleg - To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org For additional commands, e-mail: httpclient-users-h...@hc.apache.org