From 7c6d81da14e7c82d35a440769f5dd276f1914522 Mon Sep 17 00:00:00 2001 From: mediabot-pt <295750538+mediabot-pt@users.noreply.github.com> Date: Wed, 1 Jul 2026 23:08:55 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BB=A3=E7=90=86=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E7=BA=AF=E8=B7=AF=E5=BE=84=E9=80=8F=E4=BC=A0=EF=BC=8C?= =?UTF-8?q?=E5=AD=98=E8=BF=87=E7=9A=84=E8=BF=94=E5=9B=9E/=E6=B2=A1?= =?UTF-8?q?=E5=AD=98=E8=BF=87404=EF=BC=8C=E8=84=9A=E6=9C=AC=E5=8F=AF?= =?UTF-8?q?=E5=9B=9E=E9=80=80=E5=AE=9E=E6=97=B6HTTP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AccessResultController.java | 38 +++++-------------- 1 file changed, 9 insertions(+), 29 deletions(-) diff --git a/par-api/src/main/java/com/par/api/controller/AccessResultController.java b/par-api/src/main/java/com/par/api/controller/AccessResultController.java index 3f066a5..850ae56 100644 --- a/par-api/src/main/java/com/par/api/controller/AccessResultController.java +++ b/par-api/src/main/java/com/par/api/controller/AccessResultController.java @@ -39,14 +39,9 @@ public class AccessResultController { * ctx.siteUrl 指向:http://par:9012/api/v1/admin/sites/{siteId}/content */ /** - * 内容代理:支持两种方式调用 —— - * 1. 真实路径:GET /admin/sites/{siteId}/content/index.php?search=xxx - * 2. 页面类型:GET /admin/sites/{siteId}/content/sync - * 页面类型映射(按站点类型自动匹配): - * sync → index.php (或 api/member/profile) - * search → torrents.php (或 api/torrent/search) - * sign → attendance.php - * detail → details.php + * 内容代理:接收相对路径,返回存储的访问结果内容(最新一条)。 + * 脚本调用 httpGet(ctx, '/index.php') → 查找 URL 中包含该路径的存储内容。 + * 存过的返回缓存,没存过的返回 404(脚本可回退到实时 HTTP 请求)。 */ @GetMapping("/api/v1/admin/sites/{siteId}/content/**") public ResponseEntity contentProxy( @@ -54,13 +49,9 @@ public class AccessResultController { HttpServletRequest request) { String fullPath = request.getRequestURI(); String prefix = "/api/v1/admin/sites/" + siteId + "/content"; - String rawPath = fullPath.substring(fullPath.indexOf(prefix) + prefix.length()); + String relativePath = fullPath.substring(fullPath.indexOf(prefix) + prefix.length()); String query = request.getQueryString(); - - // 页面类型 → URL 模式映射 - String relativePath = resolvePageType(rawPath, siteId); String pathWithQuery = relativePath + (query != null ? "?" + query : ""); - if (pathWithQuery.isEmpty()) pathWithQuery = "/"; List results = accessResultMapper.selectList( new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() @@ -68,14 +59,15 @@ public class AccessResultController { .orderByDesc(AccessResult::getId) .last("limit 200")); - // 优先精确匹配,否则模糊匹配 + // URL 以 pathWithQuery 结尾 → 精确匹配,否则回退模糊匹配 AccessResult best = results.stream() .filter(r -> r.getUrl() != null && r.getStoragePath() != null && - (r.getUrl().endsWith(pathWithQuery) || r.getUrl().contains(pathWithQuery))) + r.getUrl().endsWith(pathWithQuery)) .findFirst().orElse(null); - if (best == null) { + if (best == null && !relativePath.isEmpty()) { best = results.stream() - .filter(r -> r.getUrl() != null && r.getStoragePath() != null && r.getUrl().contains(relativePath)) + .filter(r -> r.getUrl() != null && r.getStoragePath() != null && + r.getUrl().contains(relativePath)) .findFirst().orElse(null); } if (best == null) return ResponseEntity.notFound().build(); @@ -87,18 +79,6 @@ public class AccessResultController { return ResponseEntity.ok().contentType(MediaType.parseMediaType(contentType + ";charset=UTF-8")).body(content); } - /** 页面类型 → URL 模式 */ - private String resolvePageType(String type, String siteId) { - return switch (type) { - case "/sync", "/sync/" -> ".php?file=index"; // 通用匹配 index.php - case "/search", "/search/" -> "torrents.php"; - case "/sign", "/sign/" -> "attendance.php"; - case "/detail", "/detail/" -> "details.php"; - case "/profile", "/profile/" -> "api/member/profile"; - default -> type; // 原样传递(真实路径) - }; - } - // ==================== mediabot 提交接口(PSK 鉴权) ==================== /**