[ 
https://issues.apache.org/jira/browse/HTTPCLIENT-1309?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13566894#comment-13566894
 ] 

Ian Blavins commented on HTTPCLIENT-1309:
-----------------------------------------

G'day

Its a subtle form of your suggestion. I already have the HttpRequest as 
'request' and I do:

Header hostHeader = request.getFirstHeader("Host");
String hostName = hostHeader.getValue();
HttpHost target = new HttpHost(hostName);

If the Host in the request includes a port, as mine did, then the hostName in 
the HttpHost will too and this will lead to the UnknownHostException downstream.

So User Error.

That being said:

1) if HttpHost is going to do DNS resolution on the hostname as is, maybe it 
should reject a host name that includes a port or maybe internally it could 
treat a new HttpHost(hostName) call as a new HttpHost(hostName-less-port, port) 
call if the host name contains a port

2) To avoid the problem, however it arises, 
org.apache.http.impl.conn.SystemDefaultDnsResolver could, in its .resolve 
method, silently remove any port from the host name; better this than an 
exception

3) Or one might ask why the DefaultHttpClient's .execute method needs to be 
passed an HttpHost in addition to the HttpRequest when the request contains all 
the information to make the HttpHost; if I recall the standard correctly the 
HttpHost that is needed by .execute is completely determined by the content of 
the request. If DefaultHttpClient's execute method made the HttpHost itself 
then the possibility of mismatch between the HttpHost and the HttpRequest, 
which is what caused this problem, is eliminated; the optional scheme parameter 
of the HttpHost constructor might be one reason

Just thoughts. 

I've fixed my code and moved on to the next problem. Thanks for you help.


                
> UnknownHostException if DefaultHttpClient asked to handle HttpRequest whose 
> host name includes a port
> -----------------------------------------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-1309
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1309
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpConn
>    Affects Versions: 4.2.3
>         Environment: Mac OS X 10.6.8  HttpClient 4.2.1 - field above won't 
> let me put in 4.2.1
>            Reporter: Ian Blavins
>            Priority: Minor
>
> If a DefaultHttpClient is passed, in its .execute(target, request, context) 
> method call, an HttpRequest whose host name field contains a port suffix (eg 
> 192.168.0.102:8080) then SystemDefaultDnsResolver will try to resolve the 
> host name plus port and gets an UnknownHostException: 
> java.net.UnknownHostException: 192.168.0.102:8080.
> There appears to be a work around and that is to download the source of 
> SystemDefaultDnsResolver, make the obvious change to remove any port and then 
> rebuild httpclient-4.2.1.jar. (There is probably an easier way to present the 
> revised SystemDefaultDnsResolver since its intended to be replaced by the 
> user developer but I haven't discovered it)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to