diff --git a/util/request.js b/util/request.js index b18e79a..7d8268c 100644 --- a/util/request.js +++ b/util/request.js @@ -14,10 +14,27 @@ const anonymous_token = fs.readFileSync( 'utf-8', ) const { URLSearchParams, URL } = require('url') -const iosAppVersion = '9.0.65' const { APP_CONF } = require('../util/config.json') // request.debug = true // 开启可看到更详细信息 +const osMap = { + pc: { + os: 'pc', + appver: '3.0.18.203152', + osver: 'Microsoft-Windows-10-Professional-build-22631-64bit', + }, + android: { + os: 'android', + appver: '8.20.20.231215173437', + osver: '14', + }, + iphone: { + os: 'iOS', + appver: '9.0.90', + osver: '16.2', + }, +} + const chooseUserAgent = (crypto, uaType = 'pc') => { const userAgentMap = { weapi: { @@ -27,13 +44,13 @@ const chooseUserAgent = (crypto, uaType = 'pc') => { pc: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36 Chrome/91.0.4472.164 NeteaseMusicDesktop/3.0.18.203152', android: 'NeteaseMusic/9.1.65.240927161425(9001065);Dalvik/2.1.0 (Linux; U; Android 14; 23013RK75C Build/UKQ1.230804.001)', - ios: 'NeteaseMusic 9.0.90/5038 (iPhone; iOS 16.2; zh_CN)', + iphone: 'NeteaseMusic 9.0.90/5038 (iPhone; iOS 16.2; zh_CN)', }, } return userAgentMap[crypto][uaType] || '' } const createRequest = (uri, data, options) => { - const cookie = options.cookie || {} + let cookie = options.cookie || {} return new Promise((resolve, reject) => { options.headers = options.headers || {} let headers = options.headers @@ -44,31 +61,34 @@ const createRequest = (uri, data, options) => { headers['X-Forwarded-For'] = ip } // headers['X-Real-IP'] = '118.88.88.88' - if (typeof options.cookie === 'object') { - options.cookie = { - ...options.cookie, - __remember_me: true, + if (typeof cookie === 'object') { + let _ntes_nuid = CryptoJS.lib.WordArray.random(32).toString() + let os = osMap[cookie.os] || osMap['pc'] + cookie = { + ...cookie, + __remember_me: 'true', // NMTID: CryptoJS.lib.WordArray.random(16).toString(), - _ntes_nuid: CryptoJS.lib.WordArray.random(16).toString(), + ntes_kaola_ad: '1', + _ntes_nuid: _ntes_nuid, + _ntes_nnid: `${_ntes_nuid},${Date.now().toString()}`, + + osver: cookie.osver || os.osver, + deviceId: cookie.deviceId || global.deviceId, + os: cookie.os || os.os, + channel: cookie.channel || 'netease', + appver: cookie.appver || os.appver, } if (uri.indexOf('login') === -1) { - options.cookie['NMTID'] = CryptoJS.lib.WordArray.random(16).toString() + cookie['NMTID'] = CryptoJS.lib.WordArray.random(16).toString() } - if (!options.cookie.MUSIC_U) { + if (!cookie.MUSIC_U) { // 游客 - if (!options.cookie.MUSIC_A) { - options.cookie.MUSIC_A = anonymous_token + if (!cookie.MUSIC_A) { + cookie.MUSIC_A = anonymous_token } } - headers['Cookie'] = cookieObjToString(options.cookie) - } else if (options.cookie) { - // cookie string - headers['Cookie'] = options.cookie - } else { - const cookie = cookieToJson('__remember_me=true; NMTID=xxx') headers['Cookie'] = cookieObjToString(cookie) } - // console.log(options.cookie, headers['Cookie']) let url = '', encryptData = '', @@ -108,18 +128,17 @@ const createRequest = (uri, data, options) => { case 'eapi': case 'api': // 两种加密方式,都应生成客户端的cookie - const cookie = options.cookie || {} const header = { - osver: cookie.osver || '17.4.1', //系统版本 - deviceId: cookie.deviceId || global.deviceId, - os: cookie.os || 'ios', - appver: cookie.appver || (cookie.os != 'pc' ? iosAppVersion : ''), // app版本 + osver: cookie.osver, //系统版本 + deviceId: cookie.deviceId, + os: cookie.os, + appver: cookie.appver, // app版本 versioncode: cookie.versioncode || '140', //版本号 mobilename: cookie.mobilename || '', //设备model buildver: cookie.buildver || Date.now().toString().substr(0, 10), resolution: cookie.resolution || '1920x1080', //设备分辨率 __csrf: csrfToken, - channel: cookie.channel || 'netease', + channel: cookie.channel, requestId: `${Date.now()}_${Math.floor(Math.random() * 1000) .toString() .padStart(4, '0')}`,