You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Marco Rocci (JIRA)" <ji...@apache.org> on 2011/01/05 11:55:49 UTC
[jira] Updated: (HTTPCLIENT-1039)
AbstractHttpClient.determineTarget does not recognize target host correctly
[ https://issues.apache.org/jira/browse/HTTPCLIENT-1039?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Marco Rocci updated HTTPCLIENT-1039:
------------------------------------
Description:
I am trying to execute an HttpGet with the following URI:
"http://www.foo.foo/doSomething.html?url=http://www.bar.bar/doSomethingElse.html"
This leads to UnknownHostException
Going through the internal code, the problem seems to be in the AbstractHttpClient.determineTarget method:
String ssp = requestURI.getSchemeSpecificPart();
ssp = ssp.substring(2, ssp.length()); //remove "//" prefix
int end = ssp.indexOf(':') > 0 ? ssp.indexOf(':') :
ssp.indexOf('/') > 0 ? ssp.indexOf('/') :
ssp.indexOf('?') > 0 ? ssp.indexOf('?') : ssp.length();
String host = ssp.substring(0, end);
This code sets the target host to "www.foo.foo/doSomething.html?url=http" instead of "www.foo.foo". This obviously breaks the execution not far down the line... DefaultClientConnectionOperator.resolveHostname throws an UnknownHostException.
FWIW the AbstractHttpClient.determineTarget method actually has access to the request URI object, which correctly states that the host is "www.foo.foo".
So why does it try to extract the host from the scheme specific part anyway?
I hope this is useful... and if there is any workaround please let me know, as I'm stuck on this one.
Marco
was:
I am trying to execute an HttpGet with the following URI:
"http://www.foo.foo/doSomething.html?url=http://www.bar.bar/doSomethingElse.html"
This leads to ???
Going through the internal code, the problem seems to be in the AbstractHttpClient.determineTarget method:
String ssp = requestURI.getSchemeSpecificPart();
ssp = ssp.substring(2, ssp.length()); //remove "//" prefix
int end = ssp.indexOf(':') > 0 ? ssp.indexOf(':') :
ssp.indexOf('/') > 0 ? ssp.indexOf('/') :
ssp.indexOf('?') > 0 ? ssp.indexOf('?') : ssp.length();
String host = ssp.substring(0, end);
This code sets the target host to "www.foo.foo/doSomething.html?url=http" instead of "www.foo.foo". This obviously breaks the execution not far down the line... DefaultClientConnectionOperator.resolveHostname throws an UnknownHostException.
FWIW the AbstractHttpClient.determineTarget method actually has access to the request URI object, which correctly states that the host is "www.foo.foo".
So why does it try to extract the host from the scheme specific part anyway?
I hope this is useful... and if there is any workaround please let me know, as I'm stuck on this one.
Marco
> AbstractHttpClient.determineTarget does not recognize target host correctly
> ---------------------------------------------------------------------------
>
> Key: HTTPCLIENT-1039
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1039
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Components: HttpClient
> Affects Versions: 4.1 Beta1
> Reporter: Marco Rocci
>
> I am trying to execute an HttpGet with the following URI:
> "http://www.foo.foo/doSomething.html?url=http://www.bar.bar/doSomethingElse.html"
> This leads to UnknownHostException
> Going through the internal code, the problem seems to be in the AbstractHttpClient.determineTarget method:
> String ssp = requestURI.getSchemeSpecificPart();
> ssp = ssp.substring(2, ssp.length()); //remove "//" prefix
> int end = ssp.indexOf(':') > 0 ? ssp.indexOf(':') :
> ssp.indexOf('/') > 0 ? ssp.indexOf('/') :
> ssp.indexOf('?') > 0 ? ssp.indexOf('?') : ssp.length();
> String host = ssp.substring(0, end);
> This code sets the target host to "www.foo.foo/doSomething.html?url=http" instead of "www.foo.foo". This obviously breaks the execution not far down the line... DefaultClientConnectionOperator.resolveHostname throws an UnknownHostException.
> FWIW the AbstractHttpClient.determineTarget method actually has access to the request URI object, which correctly states that the host is "www.foo.foo".
> So why does it try to extract the host from the scheme specific part anyway?
> I hope this is useful... and if there is any workaround please let me know, as I'm stuck on this one.
> Marco
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org