You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Oleg Kalnichevski (Jira)" <ji...@apache.org> on 2022/10/25 18:11:00 UTC

[jira] [Commented] (HTTPCLIENT-2242) HttpHost.address not used when httpHost is specified without port

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

Oleg Kalnichevski commented on HTTPCLIENT-2242:
-----------------------------------------------

[~lando] Feel free to raise a PR at GitHub with the fix you are proposing.

Oleg

> HttpHost.address not used when httpHost is specified without port
> -----------------------------------------------------------------
>
>                 Key: HTTPCLIENT-2242
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2242
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient (async)
>    Affects Versions: 5.1.3
>            Reporter: Lubos Kolarik
>            Priority: Minor
>
> I am passing {{HttpHost}} instance with predefined IP to {{execute}} method of CloseableAsyncHttpClient.
> This works and the dns resolver is not used for the request. But it only works if port is specified in the HttpHost. When I specify -1 as a port, then default is correctly used, but IP address from HttpHost is lost during request preprocessing -> DnsResolver is called and IP is resolved again.
> I think the problem is within the {{org.apache.hc.client5.http.routing.RoutingSupport#normalize}} method. Here the port is set to default, according to scheme, but the {{address}} field is not transferred to the newly created {{HttpHost}} instance
> Simple testing example:
> Here when port is set to -1, dns resolving happens and custom dns resolver is called - NOK
> When port is set to be > 0, dns resolving is correctly skipped and predefined localhost address is used - OK
> {code:java}
>   public static void main(String[] args)
>       throws UnknownHostException, ExecutionException, InterruptedException {
>     PoolingAsyncClientConnectionManager connectionManager =
>         PoolingAsyncClientConnectionManagerBuilder.create()
>             .setDnsResolver(
>                 new DnsResolver() {
>                   @Override
>                   public InetAddress[] resolve(String host) throws UnknownHostException {
>                     throw new UnknownHostException("Trying to resolve IP address");
>                   }
>                   @Override
>                   public String resolveCanonicalHostname(String host) throws UnknownHostException {
>                     throw new UnknownHostException("Trying to resolve IP address");
>                   }
>                 })
>             .build();
>     CloseableHttpAsyncClient client =
>         HttpAsyncClients.custom().setConnectionManager(connectionManager).build();
>     try {
>       client.start();
>       SimpleHttpRequest request = SimpleHttpRequest.create("GET", "/");
>       HttpHost httpHost = new HttpHost("https", InetAddress.getLocalHost(), "google.com", -1);
>       HttpClientContext context = HttpClientContext.create();
>       SimpleResponseConsumer responseConsumer = SimpleResponseConsumer.create();
>       client
>           .execute(
>               httpHost,
>               SimpleRequestProducer.create(request),
>               responseConsumer,
>               null,
>               context,
>               null)
>           .get();
>     } finally {
>       client.close(CloseMode.GRACEFUL);
>     }
>   }
> {code}
> Thanks for checking



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org