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()); - } - } -}