Re: Fwd: HttpClient5 : simple example on how to configure timeout after build()

2018-05-18 Thread Oleg Kalnichevski
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



Re: Fwd: HttpClient5 : simple example on how to configure timeout after build()

2018-05-17 Thread Shawn Heisey

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()

2018-05-17 Thread /
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


---
--
To unsubscribe, e-mail:

Re: Fwd: HttpClient5 : simple example on how to configure timeout after build()

2018-05-17 Thread Oleg Kalnichevski
> > > 
> > > 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()

2018-05-17 Thread Oleg Kalnichevski
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()

2018-05-16 Thread /

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.  I do not know

Re: Fwd: HttpClient5 : simple example on how to configure timeout after build()

2018-05-16 Thread Shawn Heisey
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()

2018-05-16 Thread Oleg Kalnichevski
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();
&g

Re: Fwd: HttpClient5 : simple example on how to configure timeout after build()

2018-05-16 Thread Oleg Kalnichevski
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()

2018-05-16 Thread Daly, Paul

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
> 
> 
> ---

Re: Fwd: HttpClient5 : simple example on how to configure timeout after build()

2018-05-16 Thread /

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()

2018-05-16 Thread Shawn Heisey

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()

2018-05-16 Thread Oleg Kalnichevski
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



Fwd: HttpClient5 : simple example on how to configure timeout after build()

2018-05-16 Thread /

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