From e825702bc4411fd0a69ea37a3e3001791f5a707a Mon Sep 17 00:00:00 2001 From: jhengazuki Date: Tue, 2 Sep 2025 16:04:18 +0800 Subject: [PATCH] Fix proxy bug --- .../main/java/com/github/catvod/bean/Proxy.java | 17 ++++++++++------- .../com/github/catvod/net/OkProxySelector.java | 10 +++++++--- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/catvod/src/main/java/com/github/catvod/bean/Proxy.java b/catvod/src/main/java/com/github/catvod/bean/Proxy.java index ae00c9029..3e8977da9 100644 --- a/catvod/src/main/java/com/github/catvod/bean/Proxy.java +++ b/catvod/src/main/java/com/github/catvod/bean/Proxy.java @@ -24,7 +24,7 @@ public class Proxy { @SerializedName("urls") private List urls; - public static List NO_PROXY = List.of(java.net.Proxy.NO_PROXY); + private List proxies; public static List arrayFrom(JsonElement element) { try { @@ -36,6 +36,12 @@ public class Proxy { } } + public void init() { + proxies = new ArrayList<>(); + for (String url : getUrls()) proxies.add(create(url)); + proxies.removeIf(Objects::isNull); + } + public String getName() { return TextUtils.isEmpty(name) ? "" : name; } @@ -48,14 +54,11 @@ public class Proxy { return urls == null ? Collections.emptyList() : urls; } - public List select() { - List items = new ArrayList<>(); - for (String url : getUrls()) items.add(proxy(url)); - items.removeIf(Objects::isNull); - return items.isEmpty() ? NO_PROXY : items; + public List getProxies() { + return proxies == null ? Collections.emptyList() : proxies; } - private java.net.Proxy proxy(String url) { + private java.net.Proxy create(String url) { Uri uri = Uri.parse(url); if (uri.getScheme() == null || uri.getHost() == null || uri.getPort() <= 0) return null; if (uri.getScheme().startsWith("http")) return new java.net.Proxy(java.net.Proxy.Type.HTTP, InetSocketAddress.createUnresolved(uri.getHost(), uri.getPort())); diff --git a/catvod/src/main/java/com/github/catvod/net/OkProxySelector.java b/catvod/src/main/java/com/github/catvod/net/OkProxySelector.java index 487ebe7ad..562efdf42 100644 --- a/catvod/src/main/java/com/github/catvod/net/OkProxySelector.java +++ b/catvod/src/main/java/com/github/catvod/net/OkProxySelector.java @@ -13,12 +13,15 @@ import java.util.List; public class OkProxySelector extends ProxySelector { private final List proxy; + private final ProxySelector system; public OkProxySelector() { proxy = new ArrayList<>(); + system = ProxySelector.getDefault(); } public synchronized void addAll(List items) { + for (Proxy item : items) item.init(); proxy.addAll(items); Proxy.sort(proxy); } @@ -29,12 +32,13 @@ public class OkProxySelector extends ProxySelector { @Override public List select(URI uri) { - if (proxy.isEmpty() || uri.getHost() == null || "127.0.0.1".equals(uri.getHost())) return Proxy.NO_PROXY; - for (Proxy item : proxy) for (String host : item.getHosts()) if (Util.containOrMatch(uri.getHost(), host)) return item.select(); - return Proxy.NO_PROXY; + if (proxy.isEmpty() || uri.getHost() == null || "127.0.0.1".equals(uri.getHost())) return system.select(uri); + for (Proxy item : proxy) for (String host : item.getHosts()) if (Util.containOrMatch(uri.getHost(), host)) return item.getProxies().isEmpty() ? system.select(uri) : item.getProxies(); + return system.select(uri); } @Override public void connectFailed(URI uri, SocketAddress socketAddress, IOException e) { + system.connectFailed(uri, socketAddress, e); } }