feat: eapi返回值加密可被控制;默认不加密

This commit is contained in:
overwriter 2024-07-12 23:24:40 +08:00
parent f7132eba63
commit 656a69e07e
2 changed files with 21 additions and 9 deletions

View File

@ -13,6 +13,6 @@
"apiDomain": "https://interface.music.163.com", "apiDomain": "https://interface.music.163.com",
"domain": "https://music.163.com", "domain": "https://music.163.com",
"encrypt": true, "encrypt": true,
"encryptResponse": true "encryptResponse": false
} }
} }

View File

@ -140,6 +140,7 @@ const createRequest = (method, uri, data = {}, options) => {
data.header = header data.header = header
encryptData = encrypt.eapi(uri, data) encryptData = encrypt.eapi(uri, data)
url = APP_CONF.apiDomain + '/eapi/' + uri.substr(5) url = APP_CONF.apiDomain + '/eapi/' + uri.substr(5)
data.e_r = data.e_r != undefined ? data.e_r : APP_CONF.encryptResponse // 用于加密eapi接口的返回值
} }
if (options.crypto === 'eapi') { if (options.crypto === 'eapi') {
eapiEncrypt() eapiEncrypt()
@ -170,6 +171,14 @@ const createRequest = (method, uri, data = {}, options) => {
httpsAgent: new https.Agent({ keepAlive: true }), httpsAgent: new https.Agent({ keepAlive: true }),
} }
if (data.e_r) {
settings = {
...settings,
encoding: null,
responseType: 'arraybuffer',
}
}
if (options.proxy) { if (options.proxy) {
if (options.proxy.indexOf('pac') > -1) { if (options.proxy.indexOf('pac') > -1) {
settings.httpAgent = new PacProxyAgent(options.proxy) settings.httpAgent = new PacProxyAgent(options.proxy)
@ -206,7 +215,15 @@ const createRequest = (method, uri, data = {}, options) => {
x.replace(/\s*Domain=[^(;|$)]+;*/, ''), x.replace(/\s*Domain=[^(;|$)]+;*/, ''),
) )
try { try {
if (data.e_r) {
// eapi接口返回值被加密
answer.body = encrypt.eapiResDecrypt(
body.toString('hex').toUpperCase(),
)
} else {
answer.body = JSON.parse(body.toString()) answer.body = JSON.parse(body.toString())
}
if (answer.body.code) { if (answer.body.code) {
answer.body.code = Number(answer.body.code) answer.body.code = Number(answer.body.code)
} }
@ -221,13 +238,8 @@ const createRequest = (method, uri, data = {}, options) => {
} }
} catch (e) { } catch (e) {
// console.log(e) // console.log(e)
try {
answer.body = JSON.parse(encrypt.decrypt(body))
} catch (err) {
// console.log(err)
// can't decrypt and can't parse directly // can't decrypt and can't parse directly
answer.body = body answer.body = body
}
answer.status = res.status answer.status = res.status
} }