mirror of
https://github.com/qaiu/netdisk-fast-download.git
synced 2025-12-16 20:33:03 +00:00
0.0
This commit is contained in:
@@ -124,4 +124,8 @@ public abstract class PanBase implements IPanTool {
|
||||
}
|
||||
}
|
||||
|
||||
protected void complete(String url) {
|
||||
promise.complete(url);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,6 +2,10 @@ package cn.qaiu.parser;
|
||||
|
||||
import cn.qaiu.parser.impl.*;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 枚举类 PanDomainTemplate 定义了不同网盘服务的模板信息,包括:
|
||||
* <ul>
|
||||
@@ -75,21 +79,54 @@ public enum PanDomainTemplate {
|
||||
"https://474b\\.com/file/(.+)",
|
||||
"https://474b.com/file/{shareKey}",
|
||||
CtTool.class),
|
||||
|
||||
// =====================音乐类解析 分享链接标志->MxxS (单歌曲/普通音质)==========================
|
||||
// http://163cn.tv/xxx
|
||||
MNE("网易云音乐",
|
||||
MNES("网易云音乐分享",
|
||||
"http(s)?://163cn\\.tv/(.+)",
|
||||
"http://163cn.tv/{shareKey}",
|
||||
MneTool.class),
|
||||
MnesTool.class),
|
||||
MNE("网易云音乐",
|
||||
"https://music\\.163\\.com/(#/)?song\\?id=(.+)",
|
||||
"https://music.163.com/#/song?id={shareKey}",
|
||||
MnesTool.MneTool.class),
|
||||
// https://c6.y.qq.com/base/fcgi-bin/u?__=xxx
|
||||
MQQ("QQ音乐",
|
||||
MQQS("QQ音乐分享",
|
||||
"https://(.+)\\.y\\.qq\\.com/base/fcgi-bin/u\\?__=(.+)",
|
||||
"https://c6.y.qq.com/base/fcgi-bin/u?__={shareKey}",
|
||||
MqqTool.class),
|
||||
// https://y.qq.com/n/ryqq/songDetail/000XjcLg0fbRjv?songtype=0
|
||||
MQQ("QQ音乐",
|
||||
"https://y\\.qq\\.com/n/ryqq/songDetail/(.+)\\?.*",
|
||||
"https://y.qq.com/n/ryqq/songDetail/{shareKey}",
|
||||
MqqTool.class),
|
||||
|
||||
// https://t1.kugou.com/song.html?id=xxx
|
||||
MKG("酷狗音乐",
|
||||
MKGS("酷狗音乐分享",
|
||||
"https://(.+)\\.kugou\\.com/song\\.html\\?id=(.+)",
|
||||
"https://t1.kugou.com/song.html?id={shareKey}",
|
||||
MkgTool.class),
|
||||
MkgsTool.class),
|
||||
// https://www.kugou.com/share/2bi8Fe9CSV3.html?id=2bi8Fe9CSV3#6ed9gna4"
|
||||
MKGS2("酷狗音乐分享2",
|
||||
"https://www\\.kugou\\.com/share/(.+).html\\?.*",
|
||||
"https://www.kugou.com/share/{shareKey}.html",
|
||||
MkgsTool.Mkgs2Tool.class),
|
||||
// https://www.kugou.com/mixsong/2bi8Fe9CSV3
|
||||
MKG("酷狗音乐",
|
||||
"https://(.+)\\.kugou\\.com/song\\.html\\?id=(.+)",
|
||||
"https://www.kugou.com/mixsong/{shareKey}",
|
||||
MkgsTool.MkgTool.class),
|
||||
//
|
||||
MKWS("酷我音乐分享*",
|
||||
"https://(.+)\\.kugou\\.com/song\\.html\\?id=(.+)",
|
||||
"https://t1.kugou.com/song.html?id={shareKey}",
|
||||
MkwTool.class),
|
||||
//
|
||||
MMGS("咪咕音乐分享",
|
||||
"https://(.+)\\.kugou\\.com/song\\.html\\?id=(.+)",
|
||||
"https://t1.kugou.com/song.html?id={shareKey}",
|
||||
MkwTool.class),
|
||||
// =====================私有盘解析==========================
|
||||
// https://pan.huang1111.cn/s/xxx
|
||||
// 通用域名([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}
|
||||
CE("Cloudreve",
|
||||
@@ -133,4 +170,22 @@ public enum PanDomainTemplate {
|
||||
public Class<? extends IPanTool> getToolClass() {
|
||||
return toolClass;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
// 校验重复
|
||||
Set<String> collect =
|
||||
Arrays.stream(PanDomainTemplate.values()).map(PanDomainTemplate::getRegexPattern).collect(Collectors.toSet());
|
||||
if (collect.size()<PanDomainTemplate.values().length) {
|
||||
System.out.println("有重复枚举正则");
|
||||
}
|
||||
Set<String> collect2 =
|
||||
Arrays.stream(PanDomainTemplate.values()).map(PanDomainTemplate::getStandardUrlTemplate).collect(Collectors.toSet());
|
||||
if (collect2.size()<PanDomainTemplate.values().length) {
|
||||
System.out.println("有重复枚举标准链接");
|
||||
}
|
||||
System.out.println(collect);
|
||||
System.out.println(collect2);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ package cn.qaiu.parser.impl;
|
||||
|
||||
import cn.qaiu.entity.ShareLinkInfo;
|
||||
import cn.qaiu.parser.PanBase;
|
||||
import cn.qaiu.util.URLUtil;
|
||||
import io.vertx.core.Future;
|
||||
import io.vertx.core.MultiMap;
|
||||
import io.vertx.core.json.JsonObject;
|
||||
@@ -13,8 +12,12 @@ import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* 酷狗音乐分享
|
||||
* <a href="https://t1.kugou.com/song.html?id=2bi8Fe9CSV3">分享链接1</a>
|
||||
* <a href="https://www.kugou.com/share/2bi8Fe9CSV3.html?id=2bi8Fe9CSV3#6ed9gna4">分享链接2</a>
|
||||
* <a href="https://www.kugou.com/share/2bi8Fe9CSV3.html">分享链接3</a>
|
||||
* <a href="https://www.kugou.com/mixsong/8odv4ef8.html">歌曲链接1</a>
|
||||
*/
|
||||
public class MkgTool extends PanBase {
|
||||
public class MkgsTool extends PanBase {
|
||||
|
||||
public static final String API_URL = "https://m.kugou.com/app/i/getSongInfo.php?cmd=playInfo&hash={hash}";
|
||||
|
||||
@@ -57,7 +60,7 @@ public class MkgTool extends PanBase {
|
||||
headers.set("Upgrade-Insecure-Requests", "1");
|
||||
};
|
||||
|
||||
public MkgTool(ShareLinkInfo shareLinkInfo) {
|
||||
public MkgsTool(ShareLinkInfo shareLinkInfo) {
|
||||
super(shareLinkInfo);
|
||||
}
|
||||
|
||||
@@ -66,6 +69,13 @@ public class MkgTool extends PanBase {
|
||||
// String shareUrl = "https://t1.kugou.com/song.html?id=2bi8Fe9CSV3";
|
||||
clientNoRedirects.getAbs(shareUrl).send().onSuccess(res -> {
|
||||
String locationURL = res.headers().get("Location");
|
||||
downUrl(locationURL);
|
||||
}).onFailure(handleFail(shareUrl));
|
||||
|
||||
return promise.future();
|
||||
}
|
||||
|
||||
protected void downUrl(String locationURL) {
|
||||
client.getAbs(locationURL).putHeaders(headers).send().onSuccess(res2->{
|
||||
String body = res2.bodyAsString();
|
||||
// 正则表达式匹配 hash 字段
|
||||
@@ -90,8 +100,24 @@ public class MkgTool extends PanBase {
|
||||
fail("歌曲hash匹配失败, 可能分享已失效");
|
||||
}
|
||||
}).onFailure(handleFail(locationURL));
|
||||
}).onFailure(handleFail(shareUrl));
|
||||
}
|
||||
|
||||
public static class MkgTool extends MkgsTool{
|
||||
|
||||
public MkgTool(ShareLinkInfo shareLinkInfo) {
|
||||
super(shareLinkInfo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Future<String> parse() {
|
||||
downUrl(shareLinkInfo.getStandardUrl());
|
||||
return promise.future();
|
||||
};
|
||||
}
|
||||
|
||||
public static class Mkgs2Tool extends MkgTool{
|
||||
public Mkgs2Tool(ShareLinkInfo shareLinkInfo) {
|
||||
super(shareLinkInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import cn.qaiu.entity.ShareLinkInfo;
|
||||
import cn.qaiu.parser.PanBase;
|
||||
import cn.qaiu.util.JsExecUtils;
|
||||
import io.vertx.core.Future;
|
||||
import io.vertx.core.json.JsonObject;
|
||||
import io.vertx.uritemplate.UriTemplate;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
@@ -41,9 +42,21 @@ public class MkwTool extends PanBase {
|
||||
var token = matcher.group(2);
|
||||
String sign = JsExecUtils.getKwSign(token, key);
|
||||
System.out.println(sign);
|
||||
clientSession.getAbs(UriTemplate.of(API_URL)).setQueryParam("mid", "395500809")
|
||||
.putHeader("Secret", sign).putHeader("Cookie", key + "=" + token).send().onSuccess(res -> {
|
||||
System.out.println(res.bodyAsString());
|
||||
clientSession.getAbs(UriTemplate.of(API_URL)).setTemplateParam("mid", "395500809")
|
||||
.putHeader("Secret", sign).send().onSuccess(res -> {
|
||||
JsonObject json = asJson(res);
|
||||
log.debug(json.encodePrettily());
|
||||
try {
|
||||
if (json.getInteger("code") == 200) {
|
||||
complete(json.getJsonObject("data").getString("url"));
|
||||
} else {
|
||||
fail("链接已失效");
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
fail("解析失败");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
package cn.qaiu.parser.impl;
|
||||
|
||||
import cn.qaiu.entity.ShareLinkInfo;
|
||||
import cn.qaiu.parser.PanBase;
|
||||
import cn.qaiu.util.URLUtil;
|
||||
import io.vertx.core.Future;
|
||||
import io.vertx.uritemplate.UriTemplate;
|
||||
|
||||
/**
|
||||
* 网易云音乐, 单歌曲直链解析
|
||||
* <a href="http://163cn.tv/ykLZJJT">示例分享1</a>
|
||||
* <a href="https://music.163.com/#/song?id=472194327">示例分享2</a>
|
||||
*/
|
||||
public class MneTool extends PanBase {
|
||||
|
||||
|
||||
public static final String API_URL = "https://music.163.com/song/media/outer/url?id={id}";
|
||||
|
||||
|
||||
public MneTool(ShareLinkInfo shareLinkInfo) {
|
||||
super(shareLinkInfo);
|
||||
}
|
||||
|
||||
public Future<String> parse() {
|
||||
String shareUrl = shareLinkInfo.getStandardUrl();
|
||||
clientNoRedirects.getAbs(shareUrl).send().onSuccess(res -> {
|
||||
String locationURL = res.headers().get("Location");
|
||||
String id = URLUtil.from(locationURL).getParam("id");
|
||||
clientNoRedirects.getAbs(UriTemplate.of(API_URL)).setTemplateParam("id", id).send()
|
||||
.onSuccess(res2 -> {
|
||||
promise.complete(res2.headers().get("Location"));
|
||||
}).onFailure(handleFail(API_URL.replace("{id}", id)));
|
||||
}).onFailure(handleFail(shareUrl));
|
||||
return promise.future();
|
||||
}
|
||||
}
|
||||
54
parser/src/main/java/cn/qaiu/parser/impl/MnesTool.java
Normal file
54
parser/src/main/java/cn/qaiu/parser/impl/MnesTool.java
Normal file
@@ -0,0 +1,54 @@
|
||||
package cn.qaiu.parser.impl;
|
||||
|
||||
import cn.qaiu.entity.ShareLinkInfo;
|
||||
import cn.qaiu.parser.PanBase;
|
||||
import cn.qaiu.util.URLUtil;
|
||||
import io.vertx.core.Future;
|
||||
import io.vertx.uritemplate.UriTemplate;
|
||||
|
||||
/**
|
||||
* 网易云音乐, 单歌曲直链解析
|
||||
* <a href="http://163cn.tv/ykLZJJT">示例分享1</a>
|
||||
* <a href="https://music.163.com/#/song?id=472194327">示例分享2</a>
|
||||
*/
|
||||
public class MnesTool extends PanBase {
|
||||
|
||||
|
||||
public static final String API_URL = "https://music.163.com/song/media/outer/url?id={id}";
|
||||
|
||||
|
||||
public MnesTool(ShareLinkInfo shareLinkInfo) {
|
||||
super(shareLinkInfo);
|
||||
}
|
||||
|
||||
public Future<String> parse() {
|
||||
String shareUrl = shareLinkInfo.getStandardUrl();
|
||||
clientNoRedirects.getAbs(shareUrl).send().onSuccess(res -> {
|
||||
String locationURL = res.headers().get("Location");
|
||||
downUrl(locationURL);
|
||||
}).onFailure(handleFail(shareUrl));
|
||||
return promise.future();
|
||||
}
|
||||
|
||||
protected void downUrl(String locationURL) {
|
||||
String id = URLUtil.from(locationURL).getParam("id");
|
||||
clientNoRedirects.getAbs(UriTemplate.of(API_URL)).setTemplateParam("id", id).send()
|
||||
.onSuccess(res2 -> {
|
||||
promise.complete(res2.headers().get("Location"));
|
||||
}).onFailure(handleFail(API_URL.replace("{id}", id)));
|
||||
}
|
||||
|
||||
|
||||
public static class MneTool extends MnesTool{
|
||||
|
||||
public MneTool(ShareLinkInfo shareLinkInfo) {
|
||||
super(shareLinkInfo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Future<String> parse() {
|
||||
downUrl(shareLinkInfo.getStandardUrl());
|
||||
return promise.future();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -329,73 +329,4 @@ public class AESUtils {
|
||||
return _0x53928f + "-" + _0x430930 + "-" + _0x49ec94;
|
||||
}
|
||||
|
||||
|
||||
public static String encrypt(String str, String pwd) {
|
||||
if (pwd == null || pwd.length() <= 0) {
|
||||
throw new IllegalArgumentException("Please enter a password with which to encrypt the message.");
|
||||
}
|
||||
|
||||
// 生成 prand 值
|
||||
StringBuilder prand = new StringBuilder();
|
||||
for (int i = 0; i < pwd.length(); i++) {
|
||||
prand.append((int) pwd.charAt(i));
|
||||
}
|
||||
|
||||
// 计算 sPos, mult, incr, modu
|
||||
int sPos = prand.length() / 5;
|
||||
long mult = Long.parseLong(prand.substring(sPos, sPos + 1) +
|
||||
prand.substring(sPos * 2, sPos * 2 + 1) +
|
||||
prand.substring(sPos * 3, sPos * 3 + 1) +
|
||||
prand.substring(sPos * 4, sPos * 4 + 1) +
|
||||
prand.substring(sPos * 5, sPos * 5 + 1));
|
||||
int incr = (int) Math.ceil(pwd.length() / 2.0);
|
||||
long modu = (long) Math.pow(2, 31) - 1;
|
||||
|
||||
if (mult < 2) {
|
||||
throw new IllegalArgumentException("Algorithm cannot find a suitable hash. Please choose a different password.");
|
||||
}
|
||||
|
||||
// 生成 salt 并加到 prand 上
|
||||
long salt = Math.round(Math.random() * 1000000000) % 100000000;
|
||||
prand.append(salt);
|
||||
|
||||
// 使用 BigInteger 处理超过 Long 范围的 prand 值
|
||||
BigInteger prandValue = new BigInteger(prand.toString());
|
||||
while (prandValue.toString().length() > 10) {
|
||||
prandValue = prandValue.divide(BigInteger.TEN).add(prandValue.remainder(BigInteger.TEN));
|
||||
}
|
||||
|
||||
// 将 prand 转换为 long 进行后续处理
|
||||
prandValue = prandValue.multiply(BigInteger.valueOf(mult)).add(BigInteger.valueOf(incr)).mod(BigInteger.valueOf(modu));
|
||||
|
||||
// 加密过程
|
||||
StringBuilder encStr = new StringBuilder();
|
||||
for (int i = 0; i < str.length(); i++) {
|
||||
// 将字符和异或的结果强制转换为 int
|
||||
int encChr = (int) (str.charAt(i) ^ (int) ((prandValue.doubleValue() / modu) * 255));
|
||||
String hexStr = Integer.toHexString(encChr);
|
||||
if (hexStr.length() < 2) {
|
||||
encStr.append("0");
|
||||
}
|
||||
encStr.append(hexStr);
|
||||
|
||||
prandValue = prandValue.multiply(BigInteger.valueOf(mult)).add(BigInteger.valueOf(incr)).mod(BigInteger.valueOf(modu));
|
||||
}
|
||||
|
||||
// 将 salt 转换为 16 进制并追加到加密结果
|
||||
String saltHex = Long.toHexString(salt);
|
||||
while (saltHex.length() < 8) {
|
||||
saltHex = "0" + saltHex;
|
||||
}
|
||||
encStr.append(saltHex);
|
||||
|
||||
return encStr.toString();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
// 示例
|
||||
String encrypted = encrypt("HelloWorld", "password123");
|
||||
System.out.println("Encrypted String: " + encrypted);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -167,8 +167,10 @@ public interface JsContent {
|
||||
}
|
||||
var salt = Math.round(Math.random() * 1000000000) % 100000000;
|
||||
prand += salt;
|
||||
var flag = 1;
|
||||
while (prand.length > 10) {
|
||||
prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString();
|
||||
prand = (parseInt(prand.substring(0, 10)) + (flag ?parseFloat(prand.substring(10, prand.length)) : parseInt(prand.substring(10, prand.length)) )).toString();
|
||||
flag = 0;
|
||||
}
|
||||
prand = (mult * prand + incr) % modu;
|
||||
var enc_chr = "";
|
||||
|
||||
@@ -8,8 +8,6 @@ import javax.script.ScriptEngine;
|
||||
import javax.script.ScriptEngineManager;
|
||||
import javax.script.ScriptException;
|
||||
|
||||
import static cn.qaiu.util.AESUtils.encrypt;
|
||||
|
||||
/**
|
||||
* 执行Js脚本
|
||||
*
|
||||
@@ -85,13 +83,10 @@ public class JsExecUtils {
|
||||
|
||||
public static void main(String[] args) {
|
||||
//encrypt("ZYcEEs2JdncXG8zAaytJiXxmbyhH2wxb", "Hm_Iuvt_cdb524f42f23cer9b268564v7y735ewrq2324")
|
||||
//'7909e8e754545a61ba4bc3c90c82cb6c69b6859d5ea2e46a6bf913d1b4f11dee011dced1'
|
||||
// 1e3170f1cc1ca75172409e443b89261ec777e190ebc595b458b8e114a912a9544d2b467323f8ca011b2ed0
|
||||
// 93a44ef48949d950c91303c84d36
|
||||
// 95dea502a45fb153f68d8da0bf8e4a095a001e396f60837e9c1b58a48969eb77038234d2
|
||||
// 93c3750f6ccf9d11b5c304b32495
|
||||
System.out.println(getKwSign("Hm_lvt_cdb524f42f0ce19b169a8071123a4797", "1729503755"));
|
||||
System.out.println(getKwSign("HelloWorld", "password123"));
|
||||
// 1a9b1a33222a78d6506e0aeaacf5b9b69984954de79e98e3ef4766c009025b7000000000
|
||||
// acb0a82caa6ee641ca99ad81ace7081f58412e2148619827aa0a038a8d76c75000000000
|
||||
// f7a05b893131238ee4d1f31a85401b64056bb09988b5b9c2b87c12542578360600000000
|
||||
System.out.println(getKwSign("c7nkKBeXXzCyTQ8Wc8DRNYc4Th3f6hTE", "Hm_Iuvt_cdb524f42f23cer9b268564v7y735ewrq2324"));
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,23 @@
|
||||
#@no-redirect
|
||||
https://t1.kugou.com/song.html?id=2bi8Fe9CSV3
|
||||
|
||||
###
|
||||
#@no-cookie-jar
|
||||
#@no-redirect
|
||||
https://www.kugou.com/mixsong/8odv4ef8.html
|
||||
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
|
||||
if-modified-since: Mon, 21 Oct 2024 08:45:50 GMT
|
||||
priority: u=0, i
|
||||
sec-ch-ua: "Microsoft Edge";v="129", "Not=A?Brand";v="8", "Chromium";v="129"
|
||||
sec-ch-ua-mobile: ?0
|
||||
sec-ch-ua-platform: "Windows"
|
||||
sec-fetch-dest: document
|
||||
sec-fetch-mode: navigate
|
||||
sec-fetch-site: none
|
||||
sec-fetch-user: ?1
|
||||
upgrade-insecure-requests: 1
|
||||
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0
|
||||
|
||||
|
||||
###
|
||||
GET https://www.kugou.com/share/2bi8Fe9CSV3.html?id=2bi8Fe9CSV3
|
||||
@@ -22,8 +39,8 @@ user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,
|
||||
|
||||
|
||||
https://www.kuwo.cn/api/v1/www/music/playUrl?mid=395500809&type=music&httpsStatus=1&reqId=&plat=web_www&from=
|
||||
Cookie: Hm_Iuvt_cdb524f42f23cer9b268564v7y735ewrq2324=c7nkKBeXXzCyTQ8Wc8DRNYc4Th3f6hTE
|
||||
Secret: 4067e5c95a650d73865fe3e81feb897a6bf7b58579a3ff335de848ffb0ee31c9058333c0
|
||||
Cookie: Hm_Iuvt_cdb524f42f23cer9b268564v7y735ewrq2324=ikFKTAXkzeYGTnNTjE3i6Y7tmGSjA28r
|
||||
Secret: 4a3bcde945663040a440f9d61fd4ff79628ac2be01a3ab7364c728f3c7b45dfe027e25ac
|
||||
|
||||
###
|
||||
https://nmobi.kuwo.cn/mobi.s?f=kuwo&q=NI8S5evAnmGldi4g47EsqtfDbGsJckckbTQQd2LAgmDPITUWSd51OkjHRFj6xHPEQxNN6u+tD3K2e3HYhbE4U0pUYwqjd2kt
|
||||
@@ -43,3 +60,95 @@ https://www.kuwo.cn/api/v1/www/music/playUrl?mid=395500809&type=music&httpsStatu
|
||||
Cookie: Hm_Iuvt_cdb524f42f23cer9b268564v7y735ewrq2324=eZCHRdwSSYkG4d5XRGYtXrMpAXmGE5mh
|
||||
Secret: 460ac8ea43431f788d7ccbd67fde84755a88a8a36f88d17748d816dec3b308e402f768e8
|
||||
|
||||
|
||||
|
||||
###
|
||||
http://c.migu.cn/003sST?ifrom=1d0582bb0148c334cfc5bdea0805ddd4
|
||||
|
||||
|
||||
## https://blog.csdn.net/panjiapengfly/article/details/103352409
|
||||
|
||||
###
|
||||
#@no-cookie-jar
|
||||
https://h5.nf.migu.cn/app/v3/p/share/song/index.html?id=600913000007297943&ifrom=1d0582bb0148c334cfc5bdea0805ddd4
|
||||
|
||||
|
||||
###
|
||||
https://c.musicapp.migu.cn/MIGUM2.0/v1.0/content/resourceinfo.do?resourceId=600913000007297943&resourceType=1
|
||||
Host: c.migu.cn
|
||||
ua: Android_migu
|
||||
subchannel: 014000D
|
||||
channel: 014000D
|
||||
IMEI: h5page
|
||||
IMSI: h5page
|
||||
ogId: h5page[ac6c]
|
||||
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0
|
||||
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
|
||||
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
|
||||
Connection: keep-alive
|
||||
|
||||
###
|
||||
https://music.migu.cn/v3/api/music/audioPlayer/songs?type=1©rightId=
|
||||
|
||||
### 咪咕
|
||||
#@no-cookie-jar
|
||||
#@no-redirect
|
||||
https://freetyst.nf.migu.cn/public/product9th/product46/2024/09/2920/2024%E5%B9%B409%E6%9C%8829%E6%97%A515%E7%82%B949%E5%88%86%E7%B4%A7%E6%80%A5%E5%86%85%E5%AE%B9%E5%87%86%E5%85%A5%E7%A7%91%E5%A4%A7%E8%AE%AF%E9%A3%9E1%E9%A6%96915173/%E6%AD%8C%E6%9B%B2%E4%B8%8B%E8%BD%BD/MP3_40_16_Stero/6326951FKBL200422.mp3?Key=8358490c98c0156f&Tim=1729584947949&channelid=00&msisdn=e29ddec7374448c7aa1086b783561949&CI=6326951FKBL2600929000000926999&F=000009
|
||||
|
||||
###
|
||||
#@no-cookie-jar
|
||||
#@no-redirect
|
||||
https://freetyst.nf.migu.cn/public/ringmaker01/n3/Product/2010/12/2010%E5%B9%B411%E6%9C%8816%E6%97%A5%E9%A2%84%E5%AE%A1%E5%94%90%E7%BE%BD%E6%96%87%E5%8C%9612%E9%A6%96/%E5%85%A8%E6%9B%B2%E4%B8%8B%E8%BD%BD/MP3_40_16_Stero/%E5%9F%8B%E8%91%AC%E5%86%AC%E5%A4%A9-%E6%B1%AA%E8%8B%8F%E6%B3%B7%2B%E9%98%BF%E6%82%84.mp3?Key=fce819d43d6876aa&Tim=1729585192341&channelid=00&msisdn=48a3433be88f44c8a3035b639d6ab6e1&CI=600787010992600902000008734476&F=000009
|
||||
|
||||
###
|
||||
https://freetyst.nf.migu.cn/public/ringmaker01/n3/Product/2010/12/2010%E5%B9%B411%E6%9C%8816%E6%97%A5%E9%A2%84%E5%AE%A1%E5%94%90%E7%BE%BD%E6%96%87%E5%8C%9612%E9%A6%96/%E5%85%A8%E6%9B%B2%E4%B8%8B%E8%BD%BD/MP3_320_16_Stero/%E5%9F%8B%E8%91%AC%E5%86%AC%E5%A4%A9-%E6%B1%AA%E8%8B%8F%E6%B3%B7%2B%E9%98%BF%E6%82%84.mp3?Key=ab9f206abef3d9c6&Tim=1729585317592&channelid=00&msisdn=1969e2c2c1bf417087820aeef52517b2&CI=600787010992600902000008734476&F=020010
|
||||
|
||||
|
||||
###
|
||||
# curl 'https://music.migu.cn/v3/api/music/audioPlayer/getPlayInfo?dataType=2&data=U2FsdGVkX1%2FPz5AMzvLcNBppyNv%2FU5YkiRDE6M7BWD86KDZZv0U43iSMOPt8Ol5gvpGWDLCbi2O3ItIvdAG0PSNH6JxzPnN7Xxoo7rJ3mZ0%3D&secKey=jRw3a%2BdcOiZzIy%2FUdr2fHBHuBrkfP3AwhEpCOM92fZPHnjoFGlJK%2Bd2BrX%2FNp7mwtNwF8Bk7cCqwmD2eYYhnmUre7jwPrR33oVjT7B0FXXv7yc%2FFPBicIWjki%2BUD%2F1xBI5Hice5r6LaOXRO17luFV1ijw94s8iwEbWRJdnia2P8%3D'
|
||||
# -H 'accept: application/json, text/plain, */*'
|
||||
# -H 'accept-language: zh-CN,zh;q=0.9,en;q=0.8'
|
||||
# -H 'cache-control: no-cache'
|
||||
# -H 'cookie: mgAppH5CookieId=1253704085-1rriorf89d9c3e8cd314ff4011d5e4-1729576539; migu_cookie_id=81932e99-6f88-400b-89e9-af6dd5121945-n41729577064410; mg_uem_user_id_9fbe6599400e43a4a58700a822fd57f8=9c30c042-164c-423d-8476-e6d6586c6849; cookieId=ywE9A06YDMgOkf7EmsHa86Fr8ALGCrE1729577075545; idmpauth=true@passport.migu.cn; migu_music_status=true; migu_music_uid=a9d3d76a-11c1-4c14-b851-0b8ae3fda0dd; migu_music_avatar=%252F%252Fpl.migu.cn%252Fgroup2%252FM00%252F00%252F0F%252FCrUBJGEWf42IbL_lAABuET5vDLsAAALgwLGksAAAG4p174.jpg; migu_music_nickname=%E5%8D%83%E7%99%BE%E5%BA%A6; migu_music_level=0; migu_music_credit_level=3; migu_music_platinum=0; migu_music_msisdn=WGFyKQr5ehr1A6YwwgLxVA%3D%3D; migu_music_email=; migu_music_passid=84433242749912; migu_music_sid=s%3AbnlUvPcL1CjGvW3SpgTHmdnUhZ1b02IS.uwi4h8%2FYo7zk3ypFW%2FK%2Frf5r2i6EixZWnskoTvsryJk; player_stop_open=0; playlist_adding=1; addplaylist_has=1; audioplayer_new=1; add_play_now=1; audioplayer_exist=1; playlist_change=0; WT_FPC=id=20722ce68560244cd4a1729576539758:lv=1729577748219:ss=1729576539758; audioplayer_open=1'
|
||||
# -H 'dnt: 1'
|
||||
# -H 'pragma: no-cache'
|
||||
# -H 'priority: u=1, i'
|
||||
# -H 'referer: https://music.migu.cn/v3/music/player/audio'
|
||||
# -H 'sec-ch-ua: "Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"'
|
||||
# -H 'sec-ch-ua-mobile: ?0'
|
||||
# -H 'sec-ch-ua-platform: "Windows"'
|
||||
# -H 'sec-fetch-dest: empty'
|
||||
# -H 'sec-fetch-mode: cors'
|
||||
# -H 'sec-fetch-site: same-origin'
|
||||
# -H 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36'
|
||||
#dataType: 2
|
||||
#data: U2FsdGVkX1/Pz5AMzvLcNBppyNv/U5YkiRDE6M7BWD86KDZZv0U43iSMOPt8Ol5gvpGWDLCbi2O3ItIvdAG0PSNH6JxzPnN7Xxoo7rJ3mZ0=
|
||||
#secKey: jRw3a+dcOiZzIy/Udr2fHBHuBrkfP3AwhEpCOM92fZPHnjoFGlJK+d2BrX/Np7mwtNwF8Bk7cCqwmD2eYYhnmUre7jwPrR33oVjT7B0FXXv7yc/FPBicIWjki+UD/1xBI5Hice5r6LaOXRO17luFV1ijw94s8iwEbWRJdnia2P8=
|
||||
# auditionsFlag
|
||||
#:
|
||||
#0
|
||||
#copyrightId
|
||||
#:
|
||||
#"60078701099"
|
||||
#type
|
||||
#:
|
||||
#1
|
||||
GET https://music.migu.cn/v3/api/music/audioPlayer/getPlayInfo?dataType=2&data=U2FsdGVkX1%2FPz5AMzvLcNBppyNv%2FU5YkiRDE6M7BWD86KDZZv0U43iSMOPt8Ol5gvpGWDLCbi2O3ItIvdAG0PSNH6JxzPnN7Xxoo7rJ3mZ0%3D&secKey=jRw3a%2BdcOiZzIy%2FUdr2fHBHuBrkfP3AwhEpCOM92fZPHnjoFGlJK%2Bd2BrX%2FNp7mwtNwF8Bk7cCqwmD2eYYhnmUre7jwPrR33oVjT7B0FXXv7yc%2FFPBicIWjki%2BUD%2F1xBI5Hice5r6LaOXRO17luFV1ijw94s8iwEbWRJdnia2P8%3D
|
||||
accept: application/json, text/plain, */*
|
||||
accept-language: zh-CN,zh;q=0.9,en;q=0.8
|
||||
cache-control: no-cache
|
||||
cookie: mgAppH5CookieId=1253704085-1rriorf89d9c3e8cd314ff4011d5e4-1729576539; migu_cookie_id=81932e99-6f88-400b-89e9-af6dd5121945-n41729577064410; mg_uem_user_id_9fbe6599400e43a4a58700a822fd57f8=9c30c042-164c-423d-8476-e6d6586c6849; cookieId=ywE9A06YDMgOkf7EmsHa86Fr8ALGCrE1729577075545; idmpauth=true@passport.migu.cn; migu_music_status=true; migu_music_uid=a9d3d76a-11c1-4c14-b851-0b8ae3fda0dd; migu_music_avatar=%252F%252Fpl.migu.cn%252Fgroup2%252FM00%252F00%252F0F%252FCrUBJGEWf42IbL_lAABuET5vDLsAAALgwLGksAAAG4p174.jpg; migu_music_nickname=%E5%8D%83%E7%99%BE%E5%BA%A6; migu_music_level=0; migu_music_credit_level=3; migu_music_platinum=0; migu_music_msisdn=WGFyKQr5ehr1A6YwwgLxVA%3D%3D; migu_music_email=; migu_music_passid=84433242749912; migu_music_sid=s%3AbnlUvPcL1CjGvW3SpgTHmdnUhZ1b02IS.uwi4h8%2FYo7zk3ypFW%2FK%2Frf5r2i6EixZWnskoTvsryJk; player_stop_open=0; playlist_adding=1; addplaylist_has=1; audioplayer_new=1; add_play_now=1; audioplayer_exist=1; playlist_change=0; WT_FPC=id=20722ce68560244cd4a1729576539758:lv=1729577748219:ss=1729576539758; audioplayer_open=1
|
||||
dnt: 1
|
||||
pragma: no-cache
|
||||
priority: u=1, i
|
||||
referer: https://music.migu.cn/v3/music/player/audio
|
||||
sec-ch-ua: "Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"
|
||||
sec-ch-ua-mobile: ?0
|
||||
sec-ch-ua-platform: "Windows"
|
||||
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/129.0.0.0 Safari/537.36
|
||||
|
||||
###
|
||||
|
||||
|
||||
Reference in New Issue
Block a user