mirror of
https://gitlab.com/Binaryify/neteasecloudmusicapi.git
synced 2025-05-23 22:37:41 +08:00
allocate js cookie in middleware, update res cookie distribution
This commit is contained in:
parent
f8660cdca6
commit
50adbfd804
11
app.js
11
app.js
@ -45,11 +45,20 @@ app.use(express.static(path.resolve(__dirname, 'public')))
|
||||
app.use(function(req, res, next) {
|
||||
const proxy = req.query.proxy
|
||||
if (proxy) {
|
||||
req.headers.cookie = req.headers.cookie + `__proxy__${proxy}`
|
||||
req.headers.cookie += `__proxy__${proxy}`
|
||||
}
|
||||
next()
|
||||
})
|
||||
|
||||
// 补全缺失的cookie
|
||||
const { completeCookie } = require('./util/init')
|
||||
app.use(function(req, res, next) {
|
||||
let cookie = completeCookie(req.headers.cookie)
|
||||
req.headers.cookie = cookie.map(x => x[0]).concat(req.headers.cookie || []).join('; ')
|
||||
res.append('Set-Cookie', cookie.map(x => (x.concat('Path=/').join('; '))))
|
||||
next()
|
||||
})
|
||||
|
||||
// 因为这几个文件对外所注册的路由 和 其他文件对外注册的路由规则不一样, 所以专门写个MAP对这些文件做特殊处理
|
||||
const UnusualRouteFileMap = {
|
||||
// key 为文件名, value 为对外注册的路由
|
||||
|
@ -21,10 +21,7 @@ module.exports = (req, res, createWebAPIRequest, request) => {
|
||||
cookie,
|
||||
(music_req, cookie) => {
|
||||
// console.log(music_req)
|
||||
cookie = cookie && cookie.map(x => x.replace('Domain=.music.163.com', ''))
|
||||
res.set({
|
||||
'Set-Cookie': cookie
|
||||
})
|
||||
res.append("Set-Cookie", cookie)
|
||||
res.send(music_req)
|
||||
},
|
||||
err => res.status(502).send('fetch error')
|
||||
|
@ -17,15 +17,8 @@ module.exports = (req, res, createWebAPIRequest, request) => {
|
||||
"POST",
|
||||
data,
|
||||
cookie,
|
||||
(music_req, cookie = []) => {
|
||||
const cookieStr =
|
||||
"appver=1.5.9;os=osx; channel=netease;osver=%E7%89%88%E6%9C%AC%2010.13.2%EF%BC%88%E7%89%88%E5%8F%B7%2017C88%EF%BC%89";
|
||||
cookieStr.split(";").forEach(item => {
|
||||
cookie.push(item + ";Path=/");
|
||||
});
|
||||
res.set({
|
||||
"Set-Cookie": cookie
|
||||
});
|
||||
(music_req, cookie) => {
|
||||
res.append("Set-Cookie", cookie);
|
||||
res.send(music_req);
|
||||
},
|
||||
err => res.status(502).send("fetch error")
|
||||
|
@ -11,9 +11,7 @@ module.exports = (req, res, createWebAPIRequest, request) => {
|
||||
data,
|
||||
cookie,
|
||||
(music_req, cookie) => {
|
||||
res.set({
|
||||
"Set-Cookie": cookie
|
||||
});
|
||||
res.append("Set-Cookie", cookie);
|
||||
res.send(music_req);
|
||||
},
|
||||
err => res.status(502).send("fetch error")
|
||||
|
34
util/init.js
34
util/init.js
@ -1,16 +1,30 @@
|
||||
function randomString(pattern, length){
|
||||
return Array.apply(null, {length: length}).map(() => (pattern[Math.floor(Math.random() * pattern.length)])).join('');
|
||||
return Array.apply(null, {length: length}).map(() => (pattern[Math.floor(Math.random() * pattern.length)])).join('')
|
||||
}
|
||||
|
||||
function generateCookie(){
|
||||
const jsessionid = randomString('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKMNOPQRSTUVWXYZ\\/+',176) + ':' + (new Date).getTime();
|
||||
const nuid = randomString('0123456789abcdefghijklmnopqrstuvwxyz',32);
|
||||
return {
|
||||
'JSESSIONID-WYYY': jsessionid,
|
||||
'_iuqxldmzr_': 32,
|
||||
'_ntes_nnid': nuid + ',' + (new Date).getTime(),
|
||||
'_ntes_nuid': nuid
|
||||
function completeCookie(cookie){
|
||||
let origin = (cookie || '').split(/;\s*/).map(element => (element.split('=')[0])), extra = []
|
||||
let now = (new Date).getTime()
|
||||
|
||||
if(!origin.includes('JSESSIONID-WYYY')){
|
||||
let expire = new Date(now + 1800000) //30 minutes
|
||||
let jessionid = randomString('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKMNOPQRSTUVWXYZ\\/+',176) + ':' + expire.getTime()
|
||||
extra.push(['JSESSIONID-WYYY=' + jessionid, 'Expires=' + expire.toGMTString()])
|
||||
}
|
||||
if(!origin.includes('_iuqxldmzr_')){
|
||||
let expire = new Date(now + 157680000000) //5 years
|
||||
extra.push(['_iuqxldmzr_=32', 'Expires=' + expire.toGMTString()])
|
||||
}
|
||||
if((!origin.includes('_ntes_nnid'))||(!origin.includes('_ntes_nuid'))){
|
||||
let expire = new Date(now + 3153600000000) //100 years
|
||||
let nnid = randomString('0123456789abcdefghijklmnopqrstuvwxyz',32) + ',' + now
|
||||
extra.push(['_ntes_nnid=' + nnid, 'Expires=' + expire.toGMTString()])
|
||||
extra.push(['_ntes_nuid=' + nnid.slice(0,32), 'Expires=' + expire.toGMTString()])
|
||||
}
|
||||
|
||||
return extra
|
||||
}
|
||||
|
||||
module.exports = generateCookie
|
||||
module.exports = {
|
||||
completeCookie
|
||||
}
|
21
util/util.js
21
util/util.js
@ -1,7 +1,6 @@
|
||||
const Encrypt = require("./crypto.js");
|
||||
const request = require("request");
|
||||
const queryString = require("querystring");
|
||||
const randomCookie = require("./init.js");
|
||||
|
||||
request.debug = true;
|
||||
|
||||
@ -48,15 +47,6 @@ function createWebAPIRequest(
|
||||
|
||||
const proxy = cookie.split("__proxy__")[1];
|
||||
cookie = cookie.split("__proxy__")[0];
|
||||
|
||||
const jsCookie = randomCookie();
|
||||
const missingCookie = [];
|
||||
for (let key in jsCookie){
|
||||
if (cookie.indexOf(key) == -1){
|
||||
missingCookie.push(`${key}=${jsCookie[key]}`);
|
||||
}
|
||||
}
|
||||
cookie = cookie.split(/;\s*/).concat(missingCookie).join("; ");
|
||||
|
||||
const encryptedData = Encrypt(data);
|
||||
const options = {
|
||||
@ -87,15 +77,8 @@ function createWebAPIRequest(
|
||||
console.error(error);
|
||||
errorCallback(error);
|
||||
} else {
|
||||
//解决 网易云 cookie 添加 .music.163.com 域设置。
|
||||
//如: Domain=.music.163.com
|
||||
let cookie = res.headers["set-cookie"];
|
||||
if (Array.isArray(cookie)) {
|
||||
cookie = cookie
|
||||
.map(x => x.replace(/.music.163.com/g, ""))
|
||||
.sort((a, b) => a.length - b.length);
|
||||
cookie = cookie.concat(missingCookie.map(x => x + '; Expires=' + (new Date((new Date).getTime() + 157680000000)).toGMTString()));
|
||||
}
|
||||
let cookie = res.headers["set-cookie"] || [];
|
||||
cookie = cookie.map(x => x.replace(/\s*Domain=[^(;|$)]+;*/, ""));
|
||||
callback(body, cookie);
|
||||
}
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user