From b38076f847c00288b08b2ecda7b8a68ad1694a3f Mon Sep 17 00:00:00 2001 From: Glavo Date: Wed, 3 Sep 2025 20:16:10 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20#4377:=20=E4=BF=AE=E5=A4=8D=E7=A6=BB?= =?UTF-8?q?=E7=BA=BF=E8=B4=A6=E6=88=B7=E6=8D=A2=E8=82=A4=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E6=97=A0=E6=95=88=20CSL=20API=20=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E5=90=AF=E5=8A=A8=E5=A4=B1=E8=B4=A5=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=20(#4386)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../authlibinjector/AuthlibInjectorServer.java | 15 +-------------- .../org/jackhuang/hmcl/auth/offline/Skin.java | 2 +- .../jackhuang/hmcl/util/io/NetworkUtils.java | 17 ++++++++++++++++- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorServer.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorServer.java index 947724848..5245ffdf5 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorServer.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorServer.java @@ -29,7 +29,6 @@ import java.net.URISyntaxException; import java.util.LinkedHashMap; import java.util.Map; import java.util.Optional; -import java.util.regex.Pattern; import org.jackhuang.hmcl.auth.yggdrasil.YggdrasilService; import org.jackhuang.hmcl.util.io.HttpRequest; @@ -58,7 +57,7 @@ public class AuthlibInjectorServer implements Observable { public static AuthlibInjectorServer locateServer(String url) throws IOException { try { - url = addHttpsIfMissing(url); + url = NetworkUtils.addHttpsIfMissing(url); HttpURLConnection conn = NetworkUtils.createHttpConnection(url); String ali = conn.getHeaderField("x-authlib-injector-api-location"); if (ali != null) { @@ -85,18 +84,6 @@ public class AuthlibInjectorServer implements Observable { } } - private static String addHttpsIfMissing(String url) throws IOException { - if (Pattern.compile("^(?[a-zA-Z][a-zA-Z0-9+.-]*)://").matcher(url).find()) - return url; - - if (url.startsWith("//")) - return "https:" + url; - else if (url.startsWith("/")) - return "https:/" + url; - else - return "https://" + url; - } - private static boolean urlEqualsIgnoreSlash(String a, String b) { if (!a.endsWith("/")) a += "/"; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/offline/Skin.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/offline/Skin.java index e30d6293d..94cb934cb 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/offline/Skin.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/offline/Skin.java @@ -165,7 +165,7 @@ public class Skin { case CUSTOM_SKIN_LOADER_API: String realCslApi = type == Type.LITTLE_SKIN ? "https://littleskin.cn/csl" - : StringUtils.removeSuffix(Lang.requireNonNullElse(cslApi, ""), "/"); + : NetworkUtils.addHttpsIfMissing(StringUtils.removeSuffix(Lang.requireNonNullElse(cslApi, ""), "/")); return Task.composeAsync(() -> new GetTask(String.format("%s/%s.json", realCslApi, username))) .thenComposeAsync(json -> { SkinJson result = JsonUtils.GSON.fromJson(json, SkinJson.class); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/NetworkUtils.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/NetworkUtils.java index 2cb67bb86..a0af8a962 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/NetworkUtils.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/NetworkUtils.java @@ -63,6 +63,16 @@ public final class NetworkUtils { return "http".equals(uri.getScheme()) || "https".equals(uri.getScheme()); } + public static String addHttpsIfMissing(String url) { + if (Pattern.compile("^(?[a-zA-Z][a-zA-Z0-9+.-]*)://").matcher(url).find()) + return url; + + if (url.startsWith("//")) + return "https:" + url; + else + return "https://" + url; + } + public static String withQuery(String baseUrl, Map params) { StringBuilder sb = new StringBuilder(baseUrl); boolean first = true; @@ -126,7 +136,12 @@ public final class NetworkUtils { } public static URLConnection createConnection(URI uri) throws IOException { - URLConnection connection = uri.toURL().openConnection(); + URLConnection connection; + try { + connection = uri.toURL().openConnection(); + } catch (IllegalArgumentException | MalformedURLException e) { + throw new IOException(e); + } connection.setConnectTimeout(TIME_OUT); connection.setReadTimeout(TIME_OUT); if (connection instanceof HttpURLConnection) {