Skip to content

Commit 54dc3db

Browse files
committed
蓝奏云随机404 问题修复
1 parent 9980159 commit 54dc3db

File tree

1 file changed

+46
-14
lines changed

1 file changed

+46
-14
lines changed

parser/src/main/java/cn/qaiu/parser/impl/LzTool.java

Lines changed: 46 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import cn.qaiu.parser.PanBase;
66
import cn.qaiu.util.CastUtil;
77
import cn.qaiu.util.FileSizeConverter;
8+
import cn.qaiu.util.HeaderUtils;
89
import cn.qaiu.util.JsExecUtils;
910
import io.vertx.core.Future;
1011
import io.vertx.core.MultiMap;
@@ -49,7 +50,7 @@ public Future<String> parse() {
4950
try {
5051
String jsText = getJsByPwd(pwd, html, "document.getElementById('rpt')");
5152
ScriptObjectMirror scriptObjectMirror = JsExecUtils.executeDynamicJs(jsText, "down_p");
52-
getDownURL(sUrl, client, CastUtil.cast(scriptObjectMirror.get("data")));
53+
getDownURL(sUrl, client, scriptObjectMirror);
5354
} catch (ScriptException | NoSuchMethodException e) {
5455
fail(e, "js引擎执行失败");
5556
}
@@ -68,7 +69,7 @@ public Future<String> parse() {
6869
}
6970
try {
7071
ScriptObjectMirror scriptObjectMirror = JsExecUtils.executeDynamicJs(jsText, null);
71-
getDownURL(sUrl, client, CastUtil.cast(scriptObjectMirror.get("data")));
72+
getDownURL(sUrl, client, scriptObjectMirror);
7273
} catch (ScriptException | NoSuchMethodException e) {
7374
fail(e, "js引擎执行失败");
7475
}
@@ -104,22 +105,53 @@ private String getJsText(String html) {
104105
return html.substring(startPos, endPos).replaceAll("<!--.*-->", "");
105106
}
106107

107-
private void getDownURL(String key, WebClient client, Map<String, Object> signMap) {
108+
private void getDownURL(String key, WebClient client, Map<String, ?> obj) {
109+
if (obj == null) {
110+
fail("需要访问密码");
111+
return;
112+
}
113+
Map<?, ?> signMap = (Map<?, ?>)obj.get("data");
114+
String url0 = obj.get("url").toString();
108115
MultiMap map = MultiMap.caseInsensitiveMultiMap();
109-
signMap.forEach((k, v) -> map.set(k, v.toString()));
110-
MultiMap headers = getHeaders(key);
116+
signMap.forEach((k, v) -> {
117+
map.add((String) k, v.toString());
118+
});
119+
MultiMap headers = HeaderUtils.parseHeaders("""
120+
Accept: application/json, text/javascript, */*
121+
Accept-Encoding: gzip, deflate, br, zstd
122+
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
123+
Cache-Control: no-cache
124+
Connection: keep-alive
125+
Content-Type: application/x-www-form-urlencoded
126+
Pragma: no-cache
127+
Sec-Fetch-Dest: empty
128+
Sec-Fetch-Mode: cors
129+
Sec-Fetch-Site: same-origin
130+
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
131+
X-Requested-With: XMLHttpRequest
132+
sec-ch-ua: "Chromium";v="134", "Not:A-Brand";v="24", "Microsoft Edge";v="134"
133+
sec-ch-ua-mobile: ?0
134+
sec-ch-ua-platform: "Windows"
135+
""");
111136

112-
String url = SHARE_URL_PREFIX + "/ajaxm.php";
137+
headers.set("referer", key);
138+
// action=downprocess&signs=%3Fctdf&websignkey=I5gl&sign=BWMGOF1sBTRWXwI9BjZdYVA7BDhfNAIyUG9UawJtUGMIPlAhACkCa1UyUTAAYFxvUj5XY1E7UGFXaFVq&websign=&kd=1&ves=1
139+
String url = SHARE_URL_PREFIX + url0;
113140
client.postAbs(url).putHeaders(headers).sendForm(map).onSuccess(res2 -> {
114-
JsonObject urlJson = asJson(res2);
115-
if (urlJson.getInteger("zt") != 1) {
116-
fail(urlJson.getString("inf"));
117-
return;
141+
try {
142+
JsonObject urlJson = asJson(res2);
143+
if (urlJson.getInteger("zt") != 1) {
144+
fail(urlJson.getString("inf"));
145+
return;
146+
}
147+
String downUrl = urlJson.getString("dom") + "/file/" + urlJson.getString("url");
148+
headers.remove("Referer");
149+
client.getAbs(downUrl).putHeaders(headers).send()
150+
.onSuccess(res3 -> promise.complete(res3.headers().get("Location")))
151+
.onFailure(handleFail(downUrl));
152+
} catch (Exception e) {
153+
fail("解析异常");
118154
}
119-
String downUrl = urlJson.getString("dom") + "/file/" + urlJson.getString("url");
120-
client.getAbs(downUrl).putHeaders(headers).send()
121-
.onSuccess(res3 -> promise.complete(res3.headers().get("Location")))
122-
.onFailure(handleFail(downUrl));
123155
}).onFailure(handleFail(url));
124156
}
125157

0 commit comments

Comments
 (0)