From aa0cd68f7f4792f520545613dc3b6ecd8b28129b Mon Sep 17 00:00:00 2001 From: q Date: Tue, 25 Nov 2025 16:34:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=AB=AF=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=EF=BC=88=E5=AE=9E=E9=AA=8C=E6=80=A7=EF=BC=89=EF=BC=8Cjs?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E5=99=A8=E6=8F=92=E4=BB=B6=EF=BC=8C=E6=B1=BD?= =?UTF-8?q?=E6=B0=B4=E9=9F=B3=E4=B9=90=EF=BC=8C=E4=B8=80=E5=88=BB=E7=9B=B8?= =?UTF-8?q?=E5=86=8C=EF=BC=8C=E5=92=AA=E5=92=95=E9=9F=B3=E4=B9=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/qaiu/parser/impl/FjTool.java | 3 +- .../main/java/cn/qaiu/util/CommonUtils.java | 31 ++++++++++++++++ pom.xml | 2 +- test_client_links.java | 37 ------------------- 4 files changed, 34 insertions(+), 39 deletions(-) delete mode 100644 test_client_links.java diff --git a/parser/src/main/java/cn/qaiu/parser/impl/FjTool.java b/parser/src/main/java/cn/qaiu/parser/impl/FjTool.java index 6a17ce7..2e631bf 100644 --- a/parser/src/main/java/cn/qaiu/parser/impl/FjTool.java +++ b/parser/src/main/java/cn/qaiu/parser/impl/FjTool.java @@ -27,7 +27,7 @@ import java.util.List; */ public class FjTool extends PanBase { public static final String REFERER_URL = "https://share.feijipan.com/"; - private static final String API_URL_PREFIX = "https://api.feijipan.com/ws/"; + private static final String API_URL_PREFIX = "https://api.feejii.com/ws/"; private static final String FIRST_REQUEST_URL = API_URL_PREFIX + "recommend/list?devType=6&devModel=Chrome" + "&uuid={uuid}&extra=2×tamp={ts}&shareId={shareId}&type=0&offset=1&limit=60"; @@ -83,6 +83,7 @@ public class FjTool extends PanBase { super(shareLinkInfo); } + @Override public Future parse() { // 240530 此处shareId又改为了原始的shareId diff --git a/parser/src/main/java/cn/qaiu/util/CommonUtils.java b/parser/src/main/java/cn/qaiu/util/CommonUtils.java index e1e5e40..1c4cd58 100644 --- a/parser/src/main/java/cn/qaiu/util/CommonUtils.java +++ b/parser/src/main/java/cn/qaiu/util/CommonUtils.java @@ -2,6 +2,7 @@ package cn.qaiu.util; import java.net.MalformedURLException; import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; @@ -71,4 +72,34 @@ public class CommonUtils { Matcher matcher = pattern.matcher(input); return firstNonEmptyGroup(matcher); } + + /** + * urlEncode -> deBase64 -> string + * @param encoded 编码后的字符串 + * @return 解码后的字符串 + */ + public static String urlBase64Decode(String encoded) { + try { + String urlDecoded = java.net.URLDecoder.decode(encoded, StandardCharsets.UTF_8); + byte[] base64DecodedBytes = java.util.Base64.getDecoder().decode(urlDecoded); + return new String(base64DecodedBytes, java.nio.charset.StandardCharsets.UTF_8); + } catch (Exception e) { + throw new RuntimeException("URL Base64 解码失败", e); + } + } + + /** + * string -> base64Encode -> urlEncode + * @param str 原始字符串 + * @return 编码后的字符串 + */ + public static String urlBase64Encode(String str) { + try { + byte[] base64EncodedBytes = java.util.Base64.getEncoder().encode(str.getBytes(java.nio.charset.StandardCharsets.UTF_8)); + String base64Encoded = new String(base64EncodedBytes, java.nio.charset.StandardCharsets.UTF_8); + return java.net.URLEncoder.encode(base64Encoded, StandardCharsets.UTF_8); + } catch (Exception e) { + throw new RuntimeException("URL Base64 编码失败", e); + } + } } diff --git a/pom.xml b/pom.xml index fa6a608..ccb34b7 100644 --- a/pom.xml +++ b/pom.xml @@ -82,7 +82,7 @@ maven-surefire-plugin 2.22.2 - + true diff --git a/test_client_links.java b/test_client_links.java deleted file mode 100644 index 082a5ed..0000000 --- a/test_client_links.java +++ /dev/null @@ -1,37 +0,0 @@ -import cn.qaiu.entity.ShareLinkInfo; -import cn.qaiu.parser.clientlink.ClientLinkGeneratorFactory; -import cn.qaiu.parser.clientlink.DownloadLinkMeta; -import java.util.Map; - -public class TestClientLinks { - public static void main(String[] args) { - // 创建一个测试用的 ShareLinkInfo,模拟解析器没有实现客户端下载文件元数据的情况 - ShareLinkInfo shareLinkInfo = ShareLinkInfo.newBuilder() - .shareUrl("https://example.com/share/test123") - .panName("测试网盘") - .type("test") - .build(); - - // 添加文件名信息(模拟解析器只解析了文件名) - shareLinkInfo.getOtherParam().put("fileInfo", new cn.qaiu.entity.FileInfo() { - @Override - public String getFileName() { - return "test-file.zip"; - } - }); - - // 测试 DownloadLinkMeta.fromShareLinkInfo() 方法 - DownloadLinkMeta meta = DownloadLinkMeta.fromShareLinkInfo(shareLinkInfo); - System.out.println("DownloadLinkMeta: " + meta); - System.out.println("Has valid URL: " + meta.hasValidUrl()); - - // 测试生成客户端链接 - Map clientLinks = - ClientLinkGeneratorFactory.generateAll(shareLinkInfo); - - System.out.println("Generated client links count: " + clientLinks.size()); - for (Map.Entry entry : clientLinks.entrySet()) { - System.out.println(entry.getKey().getDisplayName() + ": " + entry.getValue()); - } - } -}