diff --git a/README.md b/README.md index 26bfbd4..c054791 100644 --- a/README.md +++ b/README.md @@ -100,17 +100,17 @@ GET http://127.0.0.1:6400/json/fc/e5079007dc31226096628870c7@QAIU # 网盘对比 -| 网盘名称 | 可直接下载分享 | 加密分享 | 初始网盘空间 | 单文件大小限制 | 登录接口 | -|------------|------------|----------|-----------|---------|------| -| 蓝奏云 | √ | √ | 不限空间 | 100M | TODO | -| 奶牛快传 | √ | X | 10G | 不限大小 | TODO | -| 移动云空间 | √ | √(密码可忽略) | 5G(个人) | 不限大小 | TODO | -| UC网盘 | √ | √ | 10G | 不限大小 | TODO | -| 小飞机网盘 | √ | √(密码可忽略) | 10G | 不限大小 | TODO | -| 360亿方云 | √(注意有流量限制) | √(密码可忽略) | 100G(须实名) | 不限大小 | TODO | -| 123云盘 | √ | √ | 2T | 100G | TODO | -| 文叔叔(TODO) | √(注意有时间限制) | √ | 10G | 5GB | TODO | -| 夸克网盘(TODO) | 需要登录 | √ | 10G | 不限大小 | TODO | +| 网盘名称 | 可直接下载分享 | 加密分享 | 初始网盘空间 | 单文件大小限制 | 登录接口 | +|------------|------------------------|----------|-----------|---------|------| +| 蓝奏云 | √ | √ | 不限空间 | 100M | TODO | +| 奶牛快传 | √ | X | 10G | 不限大小 | TODO | +| 移动云空间 | √ | √(密码可忽略) | 5G(个人) | 不限大小 | TODO | +| UC网盘 | √ | √ | 10G | 不限大小 | TODO | +| 小飞机网盘 | √ | √(密码可忽略) | 10G | 不限大小 | TODO | +| 360亿方云 | √(试用账号有时间限制企业版需要599续费) | √(密码可忽略) | 100G(须实名) | 不限大小 | TODO | +| 123云盘 | √ | √ | 2T | 100G | TODO | +| 文叔叔(TODO) | √(注意有时间限制) | √ | 10G | 5GB | TODO | +| 夸克网盘(TODO) | 需要登录 | √ | 10G | 不限大小 | TODO | # 打包部署 diff --git a/core/src/main/java/cn/qaiu/vx/core/Deploy.java b/core/src/main/java/cn/qaiu/vx/core/Deploy.java index 034483f..ec32c1a 100644 --- a/core/src/main/java/cn/qaiu/vx/core/Deploy.java +++ b/core/src/main/java/cn/qaiu/vx/core/Deploy.java @@ -63,7 +63,7 @@ public final class Deploy { var activeMode = conf.getString("active"); if ("dev".equals(activeMode)) { LOGGER.info("---------------> development environment <--------------\n"); - System.setProperty("vertxweb.environment","dev"); + System.setProperty("vertxweb.environment", "dev"); } else { LOGGER.info("---------------> Production environment <--------------\n"); } @@ -109,7 +109,14 @@ public final class Deploy { LOGGER.info("配置读取成功"); customConfig = globalConfig.getJsonObject(ConfigConstant.CUSTOM); - var vertxOptions = new VertxOptions(globalConfig.getJsonObject(ConfigConstant.VERTX)); + JsonObject vertxConfig = globalConfig.getJsonObject(ConfigConstant.VERTX); + Integer vertxConfigELPS = vertxConfig.getInteger(ConfigConstant.EVENT_LOOP_POOL_SIZE); + var vertxOptions = vertxConfigELPS == 0 ? + new VertxOptions() : new VertxOptions(vertxConfig); + + LOGGER.info("vertxConfigEventLoopPoolSize: {}, eventLoopPoolSize: {}, workerPoolSize: {}", vertxConfigELPS, + vertxOptions.getEventLoopPoolSize(), + vertxOptions.getWorkerPoolSize()); var vertx = Vertx.vertx(vertxOptions); VertxHolder.init(vertx); //配置保存在共享数据中 @@ -123,6 +130,7 @@ public final class Deploy { bch.complete("other handle complete"); }); + // 部署 路由、异步service、反向代理 服务 var future1 = vertx.deployVerticle(RouterVerticle.class, getWorkDeploymentOptions("Router")); var future2 = vertx.deployVerticle(ServiceVerticle.class, getWorkDeploymentOptions("Service")); var future3 = vertx.deployVerticle(ReverseProxyVerticle.class, getWorkDeploymentOptions("proxy")); diff --git a/core/src/main/java/cn/qaiu/vx/core/util/ConfigConstant.java b/core/src/main/java/cn/qaiu/vx/core/util/ConfigConstant.java index dfa83d9..7d84af5 100644 --- a/core/src/main/java/cn/qaiu/vx/core/util/ConfigConstant.java +++ b/core/src/main/java/cn/qaiu/vx/core/util/ConfigConstant.java @@ -3,6 +3,8 @@ package cn.qaiu.vx.core.util; public interface ConfigConstant { String CUSTOM = "custom"; String VERTX = "vertx"; + + String EVENT_LOOP_POOL_SIZE = "eventLoopPoolSize"; String LOCAL = "local"; String SERVER = "server"; String GLOBAL_CONFIG = "globalConfig"; diff --git a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/CowTool.java b/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/CowTool.java index fa78a2c..d84e913 100644 --- a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/CowTool.java +++ b/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/CowTool.java @@ -2,6 +2,7 @@ package cn.qaiu.lz.common.parser.impl; import cn.qaiu.lz.common.parser.IPanTool; import cn.qaiu.lz.common.util.CommonUtils; +import cn.qaiu.lz.common.util.PanExceptionUtils; import cn.qaiu.vx.core.util.VertxHolder; import io.vertx.core.Future; import io.vertx.core.Promise; @@ -41,17 +42,21 @@ public class CowTool implements IPanTool { if (StringUtils.isNotEmpty(downloadUrl)) { log.info("cow parse success: {}", downloadUrl); promise.complete(downloadUrl); + return; } - } else { - log.error("cow parse fail: {}; json: {}", url2, res2Json); - promise.fail("cow parse fail: " + url2 + "; json:" + res2Json); + + log.error("cow parse fail: {}; downloadUrl is empty", url2); + promise.fail("cow parse fail: " + url2 + "; downloadUrl is empty"); + return; } + log.error("cow parse fail: {}; json: {}", url2, res2Json); + promise.fail("cow parse fail: " + url2 + "; json:" + res2Json); }); - } else { - log.error("cow parse fail: {}; json: {}", key, resJson); - promise.fail("cow parse fail: " + key + "; json:" + resJson); + return; } - }); + log.error("cow parse fail: {}; json: {}", key, resJson); + promise.fail("cow parse fail: " + key + "; json:" + resJson); + }).onFailure(t -> promise.fail(PanExceptionUtils.fillRunTimeException("Cow", key, t)));; return promise.future(); } diff --git a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/EcTool.java b/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/EcTool.java index 26881f0..077bfc3 100644 --- a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/EcTool.java +++ b/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/EcTool.java @@ -2,6 +2,7 @@ package cn.qaiu.lz.common.parser.impl; import cn.qaiu.lz.common.parser.IPanTool; import cn.qaiu.lz.common.util.CommonUtils; +import cn.qaiu.lz.common.util.PanExceptionUtils; import cn.qaiu.vx.core.util.VertxHolder; import io.vertx.core.Future; import io.vertx.core.Promise; @@ -35,32 +36,28 @@ public class EcTool implements IPanTool { JsonObject fileInfo = jsonObject .getJsonObject("var") .getJsonObject("chainFileInfo"); - if (!fileInfo.containsKey("errMesg")) { - JsonObject cloudpFile = fileInfo.getJsonObject("cloudpFile"); - JsonArray fileIdList = JsonArray.of(cloudpFile); - // 构造请求JSON {"extCodeFlag":0,"isIp":0} - JsonObject requestBodyJson = JsonObject.of("extCodeFlag", 0, "isIp", 0); - requestBodyJson.put("shareId", Integer.parseInt(fileInfo.getString("shareId"))); // 注意shareId - // 数据类型 - requestBodyJson.put("groupId", cloudpFile.getString("groupId")); - requestBodyJson.put("fileIdList", fileInfo.getJsonArray("cloudpFileList")); - - // 第二次请求 获取下载链接 - client.postAbs(DOWNLOAD_REQUEST_URL) - .sendJsonObject(requestBodyJson).onSuccess(res2 -> { - JsonObject jsonRes = res2.bodyAsJsonObject(); - log.debug("ecPan get download url -> {}", res2.body().toString()); - promise.complete(jsonRes.getJsonObject("var").getString("downloadUrl")); - }).onFailure(t -> promise.fail(new RuntimeException("解析异常: key = " + dataKey, t.fillInStackTrace()))); - - } else { + if (fileInfo.containsKey("errMesg")) { promise.fail(new RuntimeException(DOWNLOAD_REQUEST_URL + " 解析失败: " + fileInfo.getString("errMesg")) + " key = " + dataKey); + return; } + JsonObject cloudpFile = fileInfo.getJsonObject("cloudpFile"); + JsonArray fileIdList = JsonArray.of(cloudpFile); + // 构造请求JSON {"extCodeFlag":0,"isIp":0} + JsonObject requestBodyJson = JsonObject.of("extCodeFlag", 0, "isIp", 0); + requestBodyJson.put("shareId", Integer.parseInt(fileInfo.getString("shareId"))); // 注意shareId + // 数据类型 + requestBodyJson.put("groupId", cloudpFile.getString("groupId")); + requestBodyJson.put("fileIdList", fileInfo.getJsonArray("cloudpFileList")); + + // 第二次请求 获取下载链接 + client.postAbs(DOWNLOAD_REQUEST_URL).sendJsonObject(requestBodyJson).onSuccess(res2 -> { + JsonObject jsonRes = res2.bodyAsJsonObject(); + log.debug("ecPan get download url -> {}", res2.body().toString()); + promise.complete(jsonRes.getJsonObject("var").getString("downloadUrl")); + }).onFailure(t -> promise.fail(PanExceptionUtils.fillRunTimeException("Ec", dataKey, t))); } - ).onFailure(t -> { - promise.fail(new RuntimeException("解析异常: key = " + dataKey, t.fillInStackTrace())); - }); + ).onFailure(t -> promise.fail(PanExceptionUtils.fillRunTimeException("Ec", dataKey, t)));; return promise.future(); } } diff --git a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/FcTool.java b/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/FcTool.java index a457900..ccaeedf 100644 --- a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/FcTool.java +++ b/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/FcTool.java @@ -2,6 +2,7 @@ package cn.qaiu.lz.common.parser.impl; import cn.qaiu.lz.common.parser.IPanTool; import cn.qaiu.lz.common.util.CommonUtils; +import cn.qaiu.lz.common.util.PanExceptionUtils; import cn.qaiu.vx.core.util.VertxHolder; import io.vertx.core.Future; import io.vertx.core.MultiMap; @@ -20,7 +21,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; /** - * 亿方云 + * 360亿方云 */ public class FcTool implements IPanTool { @@ -58,15 +59,15 @@ public class FcTool implements IPanTool { if (res2.statusCode() == 302) { sClient.getAbs(res2.getHeader("Location")).send().onSuccess(res3 -> { getDownURL(dataKey, promise, res3, sClient); - }); - } else { - promise.fail(SHARE_URL_PREFIX + " 密码跳转后获取重定向失败 \n" + html); + }).onFailure(t -> promise.fail(PanExceptionUtils.fillRunTimeException("Fc", dataKey, t))); + return; } - }); + promise.fail(SHARE_URL_PREFIX + " 密码跳转后获取重定向失败 \n" + html); + }).onFailure(t -> promise.fail(PanExceptionUtils.fillRunTimeException("Fc", dataKey, t))); return; } getDownURL(dataKey, promise, res, sClient); - }); + }).onFailure(t -> promise.fail(PanExceptionUtils.fillRunTimeException("Fc", dataKey, t))); return promise.future(); } @@ -102,6 +103,6 @@ public class FcTool implements IPanTool { return; } promise.complete(resJson.getString("download_url")); - }); + }).onFailure(t -> promise.fail(PanExceptionUtils.fillRunTimeException("Fc", dataKey, t))); } } diff --git a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/FjTool.java b/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/FjTool.java index 80eb322..70500bf 100644 --- a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/FjTool.java +++ b/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/FjTool.java @@ -3,6 +3,7 @@ package cn.qaiu.lz.common.parser.impl; import cn.qaiu.lz.common.parser.IPanTool; import cn.qaiu.lz.common.util.AESUtils; import cn.qaiu.lz.common.util.CommonUtils; +import cn.qaiu.lz.common.util.PanExceptionUtils; import cn.qaiu.vx.core.util.VertxHolder; import io.vertx.core.Future; import io.vertx.core.MultiMap; @@ -70,8 +71,8 @@ public class FjTool implements IPanTool { return; } promise.complete(headers.get("Location")); - }); - }); + }).onFailure(t -> promise.fail(PanExceptionUtils.fillRunTimeException("Fj", dataKey, t))); + }).onFailure(t -> promise.fail(PanExceptionUtils.fillRunTimeException("Fj", dataKey, t))); return promise.future(); } diff --git a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/LzTool.java b/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/LzTool.java index 5c67db6..6cd321f 100644 --- a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/LzTool.java +++ b/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/LzTool.java @@ -1,11 +1,11 @@ package cn.qaiu.lz.common.parser.impl; import cn.qaiu.lz.common.parser.IPanTool; +import cn.qaiu.lz.common.util.PanExceptionUtils; import cn.qaiu.vx.core.util.VertxHolder; import io.vertx.core.Future; import io.vertx.core.MultiMap; import io.vertx.core.Promise; -import io.vertx.core.Vertx; import io.vertx.core.json.JsonObject; import io.vertx.ext.web.client.WebClient; import io.vertx.ext.web.client.WebClientOptions; @@ -32,11 +32,11 @@ public class LzTool implements IPanTool { client.getAbs(key).send().onSuccess(res -> { String html = res.bodyAsString(); // 匹配iframe - Pattern compile = Pattern.compile("src=\"(/fn\\?[a-zA-Z0-9_+/=]{16,})\""); + Pattern compile = Pattern.compile("src=\"(/fn\\?[a-zA-Z\\d_+/=]{16,})\""); Matcher matcher = compile.matcher(html); if (!matcher.find()) { // 没有Iframe说明是加密分享, 匹配sign通过密码请求下载页面 - Pattern compile2 = Pattern.compile("sign=([0-9a-zA-Z_]{16,})"); + Pattern compile2 = Pattern.compile("sign=(\\w{16,})"); Matcher matcher2 = compile2.matcher(html); if (!matcher2.find()) { promise.fail(key + ": sign正则匹配失败, 可能分享已失效: " + html); @@ -50,15 +50,15 @@ public class LzTool implements IPanTool { client.getAbs(SHARE_URL_PREFIX + iframePath).send().onSuccess(res2 -> { String html2 = res2.bodyAsString(); System.out.println(html); - Matcher matcher2 = Pattern.compile("'sign'\s*:\s*'([0-9a-zA-Z_]+)'").matcher(html2); + Matcher matcher2 = Pattern.compile("'sign'\s*:\s*'(\\w+)'").matcher(html2); if (!matcher2.find()) { promise.fail(SHARE_URL_PREFIX + iframePath + " -> " + key + ": sign正则匹配失败, 可能分享已失效: " + html2); return; } String sign = matcher2.group(1); getDownURL(promise, code, key, client, sign); - }); - }); + }).onFailure(t -> promise.fail(PanExceptionUtils.fillRunTimeException("Lz", key, t))); + }).onFailure(t -> promise.fail(PanExceptionUtils.fillRunTimeException("Lz", key, t))); return promise.future(); } @@ -83,9 +83,9 @@ public class LzTool implements IPanTool { return; } String downUrl = urlJson.getString("dom") + "/file/" + urlJson.getString("url"); - client.getAbs(downUrl).putHeaders(headers).send().onSuccess(res3 -> { - promise.complete(res3.headers().get("Location")); - }); - }); + client.getAbs(downUrl).putHeaders(headers).send() + .onSuccess(res3 -> promise.complete(res3.headers().get("Location"))) + .onFailure(t -> promise.fail(PanExceptionUtils.fillRunTimeException("Lz", key, t))); + }).onFailure(t -> promise.fail(PanExceptionUtils.fillRunTimeException("Lz", key, t))); } } diff --git a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/UcTool.java b/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/UcTool.java index 3066d70..7926c93 100644 --- a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/UcTool.java +++ b/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/UcTool.java @@ -2,6 +2,7 @@ package cn.qaiu.lz.common.parser.impl; import cn.qaiu.lz.common.parser.IPanTool; import cn.qaiu.lz.common.util.CommonUtils; +import cn.qaiu.lz.common.util.PanExceptionUtils; import cn.qaiu.vx.core.util.VertxHolder; import io.vertx.core.Future; import io.vertx.core.Promise; @@ -12,7 +13,7 @@ import io.vertx.uritemplate.UriTemplate; import lombok.extern.slf4j.Slf4j; /** - * 移动云空间解析 + * UC网盘解析 */ @Slf4j public class UcTool implements IPanTool { @@ -74,13 +75,11 @@ public class UcTool implements IPanTool { return; } promise.complete(resJson3.getJsonArray("data").getJsonObject(0).getString("download_url")); - }) - .onFailure(t -> promise - .fail(new RuntimeException("解析异常: ", t.fillInStackTrace()))); + }).onFailure(t -> promise.fail(PanExceptionUtils.fillRunTimeException("Uc", dataKey, t))); }).onFailure(t -> promise.fail(new RuntimeException("解析异常: ", t.fillInStackTrace()))); } - ).onFailure(t -> promise.fail(new RuntimeException("解析异常: key = " + dataKey, t.fillInStackTrace()))); + ).onFailure(t -> promise.fail(PanExceptionUtils.fillRunTimeException("Uc", dataKey, t))); return promise.future(); } } diff --git a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/YeTool.java b/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/YeTool.java index 4bd1da7..022b049 100644 --- a/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/YeTool.java +++ b/web-service/src/main/java/cn/qaiu/lz/common/parser/impl/YeTool.java @@ -2,12 +2,14 @@ package cn.qaiu.lz.common.parser.impl; import cn.qaiu.lz.common.parser.IPanTool; import cn.qaiu.lz.common.util.CommonUtils; +import cn.qaiu.lz.common.util.PanExceptionUtils; import cn.qaiu.vx.core.util.VertxHolder; import io.vertx.core.Future; import io.vertx.core.Promise; import io.vertx.core.json.JsonObject; import io.vertx.ext.web.client.WebClient; import io.vertx.uritemplate.UriTemplate; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import java.net.MalformedURLException; @@ -19,6 +21,7 @@ import java.util.regex.Pattern; /** * 123网盘 */ +@Slf4j public class YeTool implements IPanTool { public static final String SHARE_URL_PREFIX = "https://www.123pan.com/s/"; public static final String FIRST_REQUEST_URL = SHARE_URL_PREFIX + "{key}.html"; @@ -39,7 +42,7 @@ public class YeTool implements IPanTool { Matcher matcher = compile.matcher(html); if (!matcher.find()) { - System.out.println("err"); + promise.fail(html + "\n Ye: " + dataKey + " 正则匹配失败"); return; } String fileInfoString = matcher.group(1); @@ -48,7 +51,7 @@ public class YeTool implements IPanTool { JsonObject resListJson = fileInfoJson.getJsonObject("reslist"); if (resJson == null || resJson.getInteger("code") != 0) { - promise.fail(dataKey + " 解析到异常JSON: "+resJson); + promise.fail(dataKey + " 解析到异常JSON: " + resJson); return; } String shareKey = resJson.getJsonObject("data").getString("ShareKey"); @@ -61,13 +64,14 @@ public class YeTool implements IPanTool { .send().onSuccess(res2 -> { JsonObject infoJson = res2.bodyAsJsonObject(); if (infoJson.getInteger("code") != 0) { + promise.fail("Ye: " + dataKey + " 状态码异常" + infoJson); return; } JsonObject getFileInfoJson = infoJson.getJsonObject("data").getJsonArray("InfoList").getJsonObject(0); getFileInfoJson.put("ShareKey", shareKey); getDownUrl(promise, client, getFileInfoJson); - }); + }).onFailure(t -> promise.fail(PanExceptionUtils.fillRunTimeException("Ye", dataKey, t))); } else { promise.fail(dataKey + " 该分享需要密码"); } @@ -77,13 +81,13 @@ public class YeTool implements IPanTool { JsonObject reqBodyJson = resListJson.getJsonObject("data").getJsonArray("InfoList").getJsonObject(0); reqBodyJson.put("ShareKey", shareKey); getDownUrl(promise, client, reqBodyJson); - }); + }).onFailure(t -> promise.fail(PanExceptionUtils.fillRunTimeException("Ye", dataKey, t))); return promise.future(); } private static void getDownUrl(Promise promise, WebClient client, JsonObject reqBodyJson) { - System.out.println(reqBodyJson); + log.info(reqBodyJson.encodePrettily()); client.postAbs("https://www.123pan.com/a/api/share/download/info").sendJsonObject(reqBodyJson).onSuccess(res2 -> { JsonObject downURLJson = res2.bodyAsJsonObject(); System.out.println(downURLJson); @@ -99,6 +103,6 @@ public class YeTool implements IPanTool { } catch (MalformedURLException e) { promise.fail("urlParams解析异常" + e.getMessage()); } - }); + }).onFailure(t -> promise.fail(PanExceptionUtils.fillRunTimeException("Ye", reqBodyJson.encodePrettily(), t))); } } diff --git a/web-service/src/main/java/cn/qaiu/lz/common/util/PanExceptionUtils.java b/web-service/src/main/java/cn/qaiu/lz/common/util/PanExceptionUtils.java new file mode 100644 index 0000000..7d7e67a --- /dev/null +++ b/web-service/src/main/java/cn/qaiu/lz/common/util/PanExceptionUtils.java @@ -0,0 +1,12 @@ +package cn.qaiu.lz.common.util; + +/** + * @author QAIU + * @date 2023/7/16 1:53 + */ +public class PanExceptionUtils { + + public static RuntimeException fillRunTimeException(String name, String dataKey, Throwable t) { + return new RuntimeException(name + ": 请求异常: key = " + dataKey, t.fillInStackTrace()); + } +} diff --git a/web-service/src/main/java/cn/qaiu/lz/web/http/ServerApi.java b/web-service/src/main/java/cn/qaiu/lz/web/http/ServerApi.java index 664e8a5..29131fc 100644 --- a/web-service/src/main/java/cn/qaiu/lz/web/http/ServerApi.java +++ b/web-service/src/main/java/cn/qaiu/lz/web/http/ServerApi.java @@ -7,7 +7,6 @@ import cn.qaiu.lz.web.service.UserService; import cn.qaiu.vx.core.annotaions.RouteHandler; import cn.qaiu.vx.core.annotaions.RouteMapping; import cn.qaiu.vx.core.enums.RouteMethod; -import cn.qaiu.vx.core.model.JsonResult; import cn.qaiu.vx.core.util.AsyncServiceUtil; import io.vertx.core.Future; import io.vertx.core.Promise; diff --git a/web-service/src/main/resources/app-dev.yml b/web-service/src/main/resources/app-dev.yml index d036e8c..14959f7 100644 --- a/web-service/src/main/resources/app-dev.yml +++ b/web-service/src/main/resources/app-dev.yml @@ -10,25 +10,29 @@ server: # 反向代理服务器配置路径(不用加后缀) proxyConf: server-proxy +# vertx线程配置 事件循环线程配置为0: eventLoopPoolSize将会采用默认配置(CPU核心*2) workerPoolSize将会采用默认20 vertx: - eventLoopPoolSize: 8 - workerPoolSize: 20 + eventLoopPoolSize: 0 + workerPoolSize: 0 + custom: - asyncServiceInstances: 8 + # 异步服务线程数 + asyncServiceInstances: 4 + # server路由(controller层)所在包路径 routerLocations: cn.qaiu.lz.web.http + # 拦截器包路径 interceptorClassPath: cn.qaiu.lz.common.interceptorImpl.DefaultInterceptor + # server层包路径 handlerLocations: cn.qaiu.lz.web.service + # 匹配规则 ignoresReg: - .*/login$ - .*/test.*$ + # 实体类包路径匹配正则 entityPackagesReg: - ^cn\.qaiu\.lz\.web\.model\..* - errorPage404: /index.html - indexPage: /test2 - sharedLogin: true -lzConfig: - config: '111' +# 数据源配置 dataSource: provider_class: io.vertx.ext.jdbc.spi.impl.HikariCPDataSourceProvider jdbcUrl: jdbc:h2:tcp://127.0.0.1:9095/./db/myData;MODE=MySQL;DATABASE_TO_LOWER=FALSE diff --git a/web-service/src/main/resources/http-tools/pan-lz.http b/web-service/src/main/resources/http-tools/pan-lz.http index 8408aa3..b02958d 100644 --- a/web-service/src/main/resources/http-tools/pan-lz.http +++ b/web-service/src/main/resources/http-tools/pan-lz.http @@ -10,3 +10,18 @@ content-type: application/x-www-form-urlencoded; task=5&folder_id=-1 + + +### +POST https://wwsd.lanzoue.com/ajaxm.php +Accept: application/json, text/javascript, */* +Content-Type: application/x-www-form-urlencoded + +action=downprocess&sign=AGYHOQk4BjdTWgQ7BzcGOlU_bATVSNQMxBDFQZgZoBj4HMFEgWnMOZ1I1A2NWOgUxB20HMlM_aUGoLOgQz&p=e4k4 + +### +https://developer.lanzoug.com/file/?VDJbZVxtADFSWwY+U2YHa1FuU2tTYgBnBnUGZFNmWylSOVMpCTJQZQQhBSdQKQFkBjMOfAMyA21VPVs8V28BLVRkWyJcMAB6UjcGfVNlB29RZVN4U3YAawZxBiZTaVszUj5TYQkLUG0ENgVuUDUBMQZkDjsDbgMxVWBbZFc8ASZUMlt/XDwAZVIyBmFTNwc3UTtTYFM8ACQGcQZwUzJbaFJiUzYJZ1ArBGIFZlArATIGaQ4kAz8DMlVnWz9XMwE1VGZbOFw3AG1SPQY0UzcHMVFqUzdTbwBmBjEGMVNsW2NSM1MzCWxQNwRkBWVQNwEwBmQOPwNyA3tVO1stVy0BdVQnW2lccwA9UmAGbVM2BzZRPlNvUzgAOwY5BiZTe1szUj9TYQkyUDkEYwVjUDQBMAZsDiUDcgMnVTRbMVd8AT1UZVs6XDkAYVI0BmBTNQc/UTlTZVMqAHcGcQZ3UzJba1JkUzwJYVA0BGIFYVA0ATAGaw4tAykDaFUiW2BXOgExVGZbIlwzAGdSNgZ%2BUzYHMlE9U3hTOwA6 +### +https://developer.lanzoug.com/file/?VTNVa1tqAjMFDAM7BDEAbAE+U2tfbgZhBnVbOQUwVCYEb1IoAToCNwQhVnRXLlcyVWAEdl9uVzkEbFYxVm5VeVVlVSxbNwJ4BWADeAQyAGgBNVN4X3oGbQZxW3sFP1Q8BGhSYAEDAj8ENlY9VzJXZ1U3BDFfMldlBDFWaVY9VXJVM1VxWzsCZwVlA2QEYAAwAWtTYF8wBiIGcVstBWRUZwQ0UjcBbwJ5BGJWNVcsV2RVOgQuX2NXZgQ2VjJWMlVhVWdVNlswAm8FagMxBGAANgE6UzdfYwZgBjFbbAU6VGwEZVIyAWQCZQRkVjZXMFdmVTcENV8uVy8EalYgVixVIVUmVWdbdAI/BTcDaARhADEBblNvXzQGPQY5W3sFLVQ8BGlSYAE6AmsEY1Y2VztXY1U/BDFfM1dnBDRWZFYkVXpVc1VkW2oCIQVuA2QEZgA5AW5TZl8wBjYGMFtkBWFUcwRxUnUBKwJrBGNWNlc7V2NVPwQxXzJXZQQzVmdWLFUhVTxVcls7AmcFYgNnBH4AMwFoU2RfLgY1BjVbawV3VGIEPA== + + diff --git a/web-service/src/main/resources/http-tools/test.http b/web-service/src/main/resources/http-tools/test.http index c916fa9..280a7b7 100644 --- a/web-service/src/main/resources/http-tools/test.http +++ b/web-service/src/main/resources/http-tools/test.http @@ -1,79 +1,65 @@ -### -# @no-redirect -GET http://127.0.0.1:6400/api/serverApi/test3?fullUrl=https://wwp.lanzoux.com/iNvid035jgcb -### +### 蓝奏云 # @no-redirect GET http://127.0.0.1:6400/parser?url=https://lanzoux.com/ia2cntg -### + +### 蓝奏云 # @no-redirect GET http://127.0.0.1:6400/parser?url=https://lanzoux.com/iNvid035jgcb -### -# @no-redirect -GET http://127.0.0.1:6400/parser?url=https://cowtransfer.com/s/9a644fe3e3a748 -### -# @no-redirect -GET http://127.0.0.1:6400/cow/e4f41b51b5da4f - -### +### 蓝奏云 # @no-redirect GET http://127.0.0.1:6400/lz/i6SqHmp1yfc -### +### 蓝奏云 # @no-redirect GET http://127.0.0.1:6400/lz/icBp6qqj82b@QAIU -### +### 蓝奏云 GET http://127.0.0.1:6400/json/lz/ia2cntg -### +### 奶牛 GET http://127.0.0.1:6400/json/cow/9a644fe3e3a748 +### 奶牛 +# @no-redirect +GET http://127.0.0.1:6400/cow/e4f41b51b5da4f -### https://www.ecpan.cn/web/#/yunpanProxy?path=%2F%23%2Fdrive%2Foutside&data=81027a5c99af5b11ca004966c945cce6W9Bf2&isShare=1 +### 奶牛 +# @no-redirect +GET http://127.0.0.1:6400/parser?url=https://cowtransfer.com/s/9a644fe3e3a748 + +### 移动云空间 https://www.ecpan.cn/web/#/yunpanProxy?path=%2F%23%2Fdrive%2Foutside&data=81027a5c99af5b11ca004966c945cce6W9Bf2&isShare=1 # @no-redirect GET http://127.0.0.1:6400/parser?url=https://www.ecpan.cn/web//yunpanProxy?path=%2F%23%2Fdrive%2Foutside&data=81027a5c99af5b11ca004966c945cce6W9Bf2&isShare=1 -# https://www.ecpan.cn/drive/fileextoverrid.do?chainUrlTemplate=https://www.ecpan.cn/web/#/yunpanProxy?path=%2F%23%2Fdrive%2Foutside&data=aa0cae0164d8885e6d35826b5b2901eckbWJBalM&parentId=-1 -### +### 移动云空间 https://www.ecpan.cn/drive/fileextoverrid.do?chainUrlTemplate=https://www.ecpan.cn/web/#/yunpanProxy?path=%2F%23%2Fdrive%2Foutside&data=aa0cae0164d8885e6d35826b5b2901eckbWJBalM&parentId=-1 # @no-redirect GET http://127.0.0.1:6400/ec/81027a5c99af5b11ca004966c945cce6W9Bf2 ### GET http://127.0.0.1:6400/json/ec/aa0cae0164d8885e6d35826b5b2901eckbWJBalM -### + +### UC网盘 # @no-redirect GET http://127.0.0.1:6400/uc/33197dd53ace4 -### +### UC网盘 GET http://127.0.0.1:6400/json/uc/33197dd53ace4 -### +### UC网盘 # @no-redirect GET http://127.0.0.1:6400/parser?url=https://fast.uc.cn/s/33197dd53ace4 -### -POST https://wwsd.lanzoue.com/ajaxm.php -Accept: application/json, text/javascript, */* -Content-Type: application/x-www-form-urlencoded - -action=downprocess&sign=AGYHOQk4BjdTWgQ7BzcGOlU_bATVSNQMxBDFQZgZoBj4HMFEgWnMOZ1I1A2NWOgUxB20HMlM_aUGoLOgQz&p=e4k4 - -### -https://developer.lanzoug.com/file/?VDJbZVxtADFSWwY+U2YHa1FuU2tTYgBnBnUGZFNmWylSOVMpCTJQZQQhBSdQKQFkBjMOfAMyA21VPVs8V28BLVRkWyJcMAB6UjcGfVNlB29RZVN4U3YAawZxBiZTaVszUj5TYQkLUG0ENgVuUDUBMQZkDjsDbgMxVWBbZFc8ASZUMlt/XDwAZVIyBmFTNwc3UTtTYFM8ACQGcQZwUzJbaFJiUzYJZ1ArBGIFZlArATIGaQ4kAz8DMlVnWz9XMwE1VGZbOFw3AG1SPQY0UzcHMVFqUzdTbwBmBjEGMVNsW2NSM1MzCWxQNwRkBWVQNwEwBmQOPwNyA3tVO1stVy0BdVQnW2lccwA9UmAGbVM2BzZRPlNvUzgAOwY5BiZTe1szUj9TYQkyUDkEYwVjUDQBMAZsDiUDcgMnVTRbMVd8AT1UZVs6XDkAYVI0BmBTNQc/UTlTZVMqAHcGcQZ3UzJba1JkUzwJYVA0BGIFYVA0ATAGaw4tAykDaFUiW2BXOgExVGZbIlwzAGdSNgZ%2BUzYHMlE9U3hTOwA6 -### -https://developer.lanzoug.com/file/?VTNVa1tqAjMFDAM7BDEAbAE+U2tfbgZhBnVbOQUwVCYEb1IoAToCNwQhVnRXLlcyVWAEdl9uVzkEbFYxVm5VeVVlVSxbNwJ4BWADeAQyAGgBNVN4X3oGbQZxW3sFP1Q8BGhSYAEDAj8ENlY9VzJXZ1U3BDFfMldlBDFWaVY9VXJVM1VxWzsCZwVlA2QEYAAwAWtTYF8wBiIGcVstBWRUZwQ0UjcBbwJ5BGJWNVcsV2RVOgQuX2NXZgQ2VjJWMlVhVWdVNlswAm8FagMxBGAANgE6UzdfYwZgBjFbbAU6VGwEZVIyAWQCZQRkVjZXMFdmVTcENV8uVy8EalYgVixVIVUmVWdbdAI/BTcDaARhADEBblNvXzQGPQY5W3sFLVQ8BGlSYAE6AmsEY1Y2VztXY1U/BDFfM1dnBDRWZFYkVXpVc1VkW2oCIQVuA2QEZgA5AW5TZl8wBjYGMFtkBWFUcwRxUnUBKwJrBGNWNlc7V2NVPwQxXzJXZQQzVmdWLFUhVTxVcls7AmcFYgNnBH4AMwFoU2RfLgY1BjVbawV3VGIEPA== - ### 小飞机盘 # @no-redirect GET http://127.0.0.1:6400/parser?url=https://www.feijix.com/s/tIfhRqH -### +### 小飞机盘 GET http://127.0.0.1:6400/json/fj/tIfhRqH -### +### 小飞机盘 # @no-redirect GET http://127.0.0.1:6400/fj/tIfhRqH @@ -81,10 +67,10 @@ GET http://127.0.0.1:6400/fj/tIfhRqH # @no-redirect GET http://127.0.0.1:6400/parser?url=https://v2.fangcloud.com/sharing/e5079007dc31226096628870c7&pwd=QAIU -### +### 360亿方云 GET http://127.0.0.1:6400/json/fc/30646fefc8bf936a4766ab8a5e -### +### 360亿方云 # @no-redirect GET http://127.0.0.1:6400/fc/e5079007dc31226096628870c7@QAIU