From f3d2808f7d1badb23d604ff67a71674c849c6e54 Mon Sep 17 00:00:00 2001 From: Athou Date: Wed, 23 Oct 2024 19:58:47 +0200 Subject: [PATCH] add support for Internationalized Domain Names (#1588) --- .../java/com/commafeed/backend/HttpGetter.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/commafeed-server/src/main/java/com/commafeed/backend/HttpGetter.java b/commafeed-server/src/main/java/com/commafeed/backend/HttpGetter.java index 2132e929..72bede7a 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/HttpGetter.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/HttpGetter.java @@ -2,7 +2,10 @@ package com.commafeed.backend; import java.io.IOException; import java.io.InputStream; +import java.net.IDN; +import java.net.InetAddress; import java.net.URI; +import java.net.UnknownHostException; import java.time.Duration; import java.util.ArrayList; import java.util.List; @@ -10,6 +13,8 @@ import java.util.Optional; import java.util.concurrent.ExecutionException; import org.apache.commons.lang3.StringUtils; +import org.apache.hc.client5.http.DnsResolver; +import org.apache.hc.client5.http.SystemDefaultDnsResolver; import org.apache.hc.client5.http.config.ConnectionConfig; import org.apache.hc.client5.http.config.RequestConfig; import org.apache.hc.client5.http.config.TlsConfig; @@ -191,6 +196,7 @@ public class HttpGetter { .setDefaultTlsConfig(TlsConfig.custom().setHandshakeTimeout(Timeout.of(config.httpClient().sslHandshakeTimeout())).build()) .setMaxConnPerRoute(poolSize) .setMaxConnTotal(poolSize) + .setDnsResolver(new InternationalizedDomainNameToAsciiDnsResolver(SystemDefaultDnsResolver.INSTANCE)) .build(); } @@ -227,6 +233,18 @@ public class HttpGetter { .build(); } + private record InternationalizedDomainNameToAsciiDnsResolver(DnsResolver delegate) implements DnsResolver { + @Override + public InetAddress[] resolve(String host) throws UnknownHostException { + return delegate.resolve(IDN.toASCII(host)); + } + + @Override + public String resolveCanonicalHostname(String host) throws UnknownHostException { + return delegate.resolveCanonicalHostname(IDN.toASCII(host)); + } + } + @Getter public static class NotModifiedException extends Exception { private static final long serialVersionUID = 1L;