hc-httpclient-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Oleg Kalnichevski <ol...@apache.org>
Subject Re: Problem with PostMethod.getHostConfiguration().setHost() on v3beta1
Date Thu, 27 Jan 2005 13:33:14 GMT
Okay. I.ll try to explain it using an example 

Consider the following scenario:

HostConfiguration hostconfig = new HostConfiguration();
Hostconfig.setHost("thishost");

GetMethod httpget = new GetMethod("http://thathost/stuff");
httpclient.executeMethod(hostconfig, httpget); // -> ???

Which host do you expect HttpClient to send the request to? I believe
the targer host in this case should be "thathost"

In order to avoid ambiguity please use relative URLs when overriding the
default host config:

HostConfiguration hostconfig = new HostConfiguration();
Hostconfig.setHost("thishost");

GetMethod httpget = new GetMethod("/stuff");
httpclient.executeMethod(hostconfig, httpget); // -> thishost

Exactly the same logic applies to socket factories

Hope this helps

Oleg


On Thu, Jan 27, 2005 at 12:00:31PM +0100, Francois Grandjean wrote:
> Thanks for the help. What I'm actually trying to do is to use a custom
> SecureProtocolSocketFactory because I have to connect to several hosts
> through HTTPS with different keystores and truststores.
> 
> But even if I use an absolute URL in both cases, I have a different
> SocketFactory used. 
> Example 1 below uses the CustomProtocolSocketFactory as expected
> Example 2 uses org.apache.commons.httpclient.protocol.
> SSLProtocolSocketFactory
> 
> 1/
> Protocol httpsProtocol = new Protocol("https", new
> CustomProtocolSocketFactory(), 443);
> HostConfiguration hostConfig = new HostConfiguration();
> hostConfig.setHost("https://somehost/", 443, httpsProtocol);
> HttpClient httpClient = new HttpClient();
> GetMethod method = new GetMethod("https://somehost/");
> httpClient.executeMethod(hostConfig, method);
> 
> 2/
> Protocol httpsProtocol = new Protocol("https", new
> CustomProtocolSocketFactory(), 443);
> HostConfiguration hostConfig = new HostConfiguration();
> hostConfig.setHost("https://somehost/", 443, httpsProtocol);
> HttpClient httpClient = new HttpClient();
> httpClient.setHostConfiguration(hostConfig); //ONLY DIFFERENCE
> GetMethod method = new GetMethod("https://somehost/");
> httpClient.executeMethod(hostConfig, method);
> 
> Note also that calling httpClient.executeMethod(method), i.e. without
> passing the config, does not change anything.
> 
> Thanks a lot !!
> 
> Francois
> 
> -----Original Message-----
> From: Oleg Kalnichevski [mailto:olegk@apache.org] 
> Sent: mercredi 26 janvier 2005 21:13
> To: HttpClient User Discussion
> Subject: RE: Problem with PostMethod.getHostConfiguration().setHost() on
> v3beta1
> 
> Francois,
> 
> If the target URL is absolute (explicitly defines a protocol and a
> host), it always overrides the default host config. One should be using
> relative URLs when expecting the host config to take effect.
> 
> I hope this explains it
> 
> Oleg
> 
> On Wed, 2005-01-26 at 19:23 +0100, Francois Grandjean wrote:
> > Hi,
> > 
> > I had exactly the same problem. The proposed solution works but I'm
> > still surprised that the following code (setting the configuration
> also
> > on the client level) leads to the same problem:
> > 
> > 
> > HostConfiguration hostconfig = new HostConfiguration("somehost",
> 15555,
> > MySslProtocolObject);
> > HttpClient httpclient = new HttpClient(); 
> > Httpclient. setHostConfiguration(hostconfig) //ADDED LINE
> > httpclient.executeMethod(hostconfig, httpget);
> > 
> > 
> > I looked at the code, and I think the problem comes from lines
> 382-386:
> > 
> > HostConfiguration defaulthostconfig = getHostConfiguration();
> > if (hostConfiguration == null || hostConfiguration ==
> defaulthostconfig)
> > {
> >     // make a deep copy of the host defaults
> >     hostConfiguration = new HostConfiguration(defaulthostconfig);
> >     URI uri = method.getURI(); 
> >     if (uri.isAbsoluteURI()) {
> >         hostConfiguration.setHost(uri);
> >     }
> > }
> > 
> > Having the configuration set at the client level makes it enter the if
> > statement and clone the config.
> > But the call to 
> > hostConfiguration.setHost(uri); 
> > overwrites the hostConfiguration.protocol with the default protocol
> > registered (Protocol.getProtocol(uri.getScheme())).
> > 
> > Thanks for your feedback.
> > 
> > Francois
> > 
> > 
> > -----Original Message-----
> > From: Riad Souissi [mailto:rsouissi.c@stc.com.sa] 
> > Sent: lundi 17 janvier 2005 13:20
> > To: HttpClient User Discussion
> > Subject: RE: Problem with PostMethod.getHostConfiguration().setHost()
> on
> > v3 beta1
> > 
> > 
> > Thanks, works exactly as expected!
> > 
> > Regards,
> > riad
> > 
> > 
> > -----Original Message-----
> > From: Oleg Kalnichevski [mailto:olegk@apache.org]
> > 
> > Sent: Monday, January 17, 2005 2:13 PM
> > To: httpclient-user@jakarta.apache.org
> > Subject: Re: Problem with PostMethod.getHostConfiguration().setHost()
> on
> > v3 beta1
> > 
> > On Mon, Jan 17, 2005 at 01:14:34PM +0300, Riad Souissi wrote:
> > >
> > 
> > >
> > 
> > >
> > 
> > > Hi,
> > >
> > 
> > > Before, using version 2 or version3_alpha2, the following code was
> > > working:
> > >
> > 
> > > ----
> > > myPostMethod.getHostConfiguration().setHost("somehost", "15555",
> > > mySslProtocolObject)
> > > ----
> > >
> > 
> > > The reason I was setting mySslProtocolObject on the method level is
> > 
> > > because I do not want to force it on the whole host:port. I need to
> > 
> > > have a granular control.
> > >
> > 
> > > Then I switched to version3_beta1, and it stopped to work. It does
> not
> > 
> > > seem to use any of the SSL classes defined within
> mySslProtocolObject
> > 
> > > (the object which I derived from ProtocolSocketFactory). I used
> > 
> > > println calls to find out that sslProtocolObject was not used when I
> > 
> > > was sending an HTTPS request to host:port using the myPostMethod
> > defined above.
> > >
> > 
> > > Do you have an idea how to get it back to work ? I know that
> > > getHostConfiguration().setHost() is deprecated, but I found no other
> > 
> > > way to do the same thing with this granularity (at the PostMethod
> > level).
> > >
> > 
> > Hi Riad,
> > 
> > Try this
> > 
> > HostConfiguration hostconfig = new HostConfiguration("somehost",
> 15555,
> >   MySslProtocolObject);
> > HttpClient httpclient = new HttpClient(); ...
> > 
> > httpclient.executeMethod(hostconfig, httpget);
> >  
> > 
> > Hope this helps
> > 
> > Oleg
> > 
> > > Regards,
> > > riad
> > >
> > 
> > > DiscalimerThe information in this email and in any files transmitted
> > 
> > > with it, is intended only for the addressee and may contain
> > confidential and/or privileged material.
> > > Access to this email by anyone else is unauthorized. If you receive
> > 
> > > this in error, please contact the sender immediately and delete the
> > material from any computer.
> > > If you are not the intended recipient, any disclosure, copying,
> > 
> > > distribution or any action taken or omitted to be taken in reliance
> on
> > it, is strictly prohibited.
> > > Statement and opinions expressed in this e-mail are those of the
> > 
> > > sender, and do not necessarily reflect those of STC.
> > >
> > 
> > >
> ---------------------------------------------------------------------
> > > To unsubscribe, e-mail:
> httpclient-user-unsubscribe@jakarta.apache.org
> > > For additional commands, e-mail:
> > 
> > > httpclient-user-help@jakarta.apache.org
> > >
> > 
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: httpclient-user-unsubscribe@jakarta.apache.org
> > For additional commands, e-mail:
> httpclient-user-help@jakarta.apache.org
> > 
> > 
> > DiscalimerThe information in this email and in any files transmitted
> > with it,
> > is intended only for the addressee and may contain confidential and/or
> > privileged material.
> > Access to this email by anyone else is unauthorized. If you receive
> this
> > in error,
> > please contact the sender immediately and delete the material from any
> > computer.
> > If you are not the intended recipient, any disclosure, copying,
> > distribution or
> > any action taken or omitted to be taken in reliance on it, is strictly
> > prohibited.
> > Statement and opinions expressed in this e-mail are those of the
> sender,
> > and do not
> > necessarily reflect those of STC.
> > 
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: httpclient-user-unsubscribe@jakarta.apache.org
> > For additional commands, e-mail:
> httpclient-user-help@jakarta.apache.org
> > 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: httpclient-user-help@jakarta.apache.org
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: httpclient-user-help@jakarta.apache.org
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: httpclient-user-help@jakarta.apache.org


Mime
View raw message