From 68f1334907bcb0f5a502ab5a44d3a18bc9d95a7f Mon Sep 17 00:00:00 2001 From: qaiu <736226400@qq.com> Date: Sat, 22 Mar 2025 12:53:33 +0800 Subject: [PATCH] =?UTF-8?q?=E8=93=9D=E5=A5=8F=E4=BA=91=E9=9A=8F=E6=9C=BA40?= =?UTF-8?q?4=20=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/qaiu/parser/impl/LzTool.java | 60 ++++++++++++++----- 1 file changed, 46 insertions(+), 14 deletions(-) diff --git a/parser/src/main/java/cn/qaiu/parser/impl/LzTool.java b/parser/src/main/java/cn/qaiu/parser/impl/LzTool.java index ff2a24a..f554773 100644 --- a/parser/src/main/java/cn/qaiu/parser/impl/LzTool.java +++ b/parser/src/main/java/cn/qaiu/parser/impl/LzTool.java @@ -5,6 +5,7 @@ import cn.qaiu.entity.ShareLinkInfo; import cn.qaiu.parser.PanBase; import cn.qaiu.util.CastUtil; import cn.qaiu.util.FileSizeConverter; +import cn.qaiu.util.HeaderUtils; import cn.qaiu.util.JsExecUtils; import io.vertx.core.Future; import io.vertx.core.MultiMap; @@ -49,7 +50,7 @@ public class LzTool extends PanBase { try { String jsText = getJsByPwd(pwd, html, "document.getElementById('rpt')"); ScriptObjectMirror scriptObjectMirror = JsExecUtils.executeDynamicJs(jsText, "down_p"); - getDownURL(sUrl, client, CastUtil.cast(scriptObjectMirror.get("data"))); + getDownURL(sUrl, client, scriptObjectMirror); } catch (ScriptException | NoSuchMethodException e) { fail(e, "js引擎执行失败"); } @@ -68,7 +69,7 @@ public class LzTool extends PanBase { } try { ScriptObjectMirror scriptObjectMirror = JsExecUtils.executeDynamicJs(jsText, null); - getDownURL(sUrl, client, CastUtil.cast(scriptObjectMirror.get("data"))); + getDownURL(sUrl, client, scriptObjectMirror); } catch (ScriptException | NoSuchMethodException e) { fail(e, "js引擎执行失败"); } @@ -104,22 +105,53 @@ public class LzTool extends PanBase { return html.substring(startPos, endPos).replaceAll("", ""); } - private void getDownURL(String key, WebClient client, Map signMap) { + private void getDownURL(String key, WebClient client, Map obj) { + if (obj == null) { + fail("需要访问密码"); + return; + } + Map signMap = (Map)obj.get("data"); + String url0 = obj.get("url").toString(); MultiMap map = MultiMap.caseInsensitiveMultiMap(); - signMap.forEach((k, v) -> map.set(k, v.toString())); - MultiMap headers = getHeaders(key); + signMap.forEach((k, v) -> { + map.add((String) k, v.toString()); + }); + MultiMap headers = HeaderUtils.parseHeaders(""" + Accept: application/json, text/javascript, */* + Accept-Encoding: gzip, deflate, br, zstd + Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 + Cache-Control: no-cache + Connection: keep-alive + Content-Type: application/x-www-form-urlencoded + Pragma: no-cache + Sec-Fetch-Dest: empty + Sec-Fetch-Mode: cors + Sec-Fetch-Site: same-origin + User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0 + X-Requested-With: XMLHttpRequest + sec-ch-ua: "Chromium";v="134", "Not:A-Brand";v="24", "Microsoft Edge";v="134" + sec-ch-ua-mobile: ?0 + sec-ch-ua-platform: "Windows" + """); - String url = SHARE_URL_PREFIX + "/ajaxm.php"; + headers.set("referer", key); + // action=downprocess&signs=%3Fctdf&websignkey=I5gl&sign=BWMGOF1sBTRWXwI9BjZdYVA7BDhfNAIyUG9UawJtUGMIPlAhACkCa1UyUTAAYFxvUj5XY1E7UGFXaFVq&websign=&kd=1&ves=1 + String url = SHARE_URL_PREFIX + url0; client.postAbs(url).putHeaders(headers).sendForm(map).onSuccess(res2 -> { - JsonObject urlJson = asJson(res2); - if (urlJson.getInteger("zt") != 1) { - fail(urlJson.getString("inf")); - return; + try { + JsonObject urlJson = asJson(res2); + if (urlJson.getInteger("zt") != 1) { + fail(urlJson.getString("inf")); + return; + } + String downUrl = urlJson.getString("dom") + "/file/" + urlJson.getString("url"); + headers.remove("Referer"); + client.getAbs(downUrl).putHeaders(headers).send() + .onSuccess(res3 -> promise.complete(res3.headers().get("Location"))) + .onFailure(handleFail(downUrl)); + } catch (Exception e) { + fail("解析异常"); } - String downUrl = urlJson.getString("dom") + "/file/" + urlJson.getString("url"); - client.getAbs(downUrl).putHeaders(headers).send() - .onSuccess(res3 -> promise.complete(res3.headers().get("Location"))) - .onFailure(handleFail(downUrl)); }).onFailure(handleFail(url)); }