diff --git a/CHANGELOG.MD b/CHANGELOG.MD index ccf612a..2fe3c1d 100644 --- a/CHANGELOG.MD +++ b/CHANGELOG.MD @@ -1,4 +1,10 @@ # 更新日志 +### 4.17.0 | 2024.04.29 +- ua 更新 +- cookie 处理优化 +- 收藏与取消收藏歌单接口更新 + + ### 4.16.6 | 2024.04.25 - ua 问题修复 - 使用 crypto-js 重构 crypto 部分 diff --git a/module/artist_detail.js b/module/artist_detail.js index d9ce2e0..63079c9 100644 --- a/module/artist_detail.js +++ b/module/artist_detail.js @@ -1,6 +1,4 @@ module.exports = (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' return request( 'POST', `https://music.163.com/api/artist/head/info/get`, diff --git a/module/artist_new_mv.js b/module/artist_new_mv.js index 1cd6189..27cdb8c 100644 --- a/module/artist_new_mv.js +++ b/module/artist_new_mv.js @@ -1,6 +1,4 @@ module.exports = (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' const data = { limit: query.limit || 20, startTimestamp: query.before || Date.now(), diff --git a/module/artist_new_song.js b/module/artist_new_song.js index f686a78..11d596d 100644 --- a/module/artist_new_song.js +++ b/module/artist_new_song.js @@ -1,6 +1,4 @@ module.exports = (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' const data = { limit: query.limit || 20, startTimestamp: query.before || Date.now(), diff --git a/module/artist_songs.js b/module/artist_songs.js index 6a580a4..a64dff6 100644 --- a/module/artist_songs.js +++ b/module/artist_songs.js @@ -1,5 +1,6 @@ module.exports = (query, request) => { query.cookie.os = 'pc' + query.cookie.appver = '2.9.7' const data = { id: query.id, private_cloud: 'true', diff --git a/module/cloud.js b/module/cloud.js index 03a9596..50a18b3 100644 --- a/module/cloud.js +++ b/module/cloud.js @@ -10,8 +10,7 @@ module.exports = async (query, request) => { .replace('.' + ext, '') .replace(/\s/g, '') .replace(/\./g, '_') - query.cookie.os = 'pc' - query.cookie.appver = '2.9.7' + const bitrate = 999000 if (!query.songFile) { return Promise.reject({ diff --git a/module/cloud_match.js b/module/cloud_match.js index 6da99a1..26f6fd5 100644 --- a/module/cloud_match.js +++ b/module/cloud_match.js @@ -1,6 +1,4 @@ module.exports = (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' const data = { userId: query.uid, songId: query.sid, diff --git a/module/comment_album.js b/module/comment_album.js index 6364e89..162fd3d 100644 --- a/module/comment_album.js +++ b/module/comment_album.js @@ -2,6 +2,7 @@ module.exports = (query, request) => { query.cookie.os = 'pc' + // query.cookie.appver = '2.9.7' const data = { rid: query.id, limit: query.limit || 20, diff --git a/module/comment_dj.js b/module/comment_dj.js index d5eb029..a798908 100644 --- a/module/comment_dj.js +++ b/module/comment_dj.js @@ -2,6 +2,7 @@ module.exports = (query, request) => { query.cookie.os = 'pc' + query.cookie.appver = '2.9.7' const data = { rid: query.id, limit: query.limit || 20, diff --git a/module/comment_hot.js b/module/comment_hot.js index 8437775..9b05653 100644 --- a/module/comment_hot.js +++ b/module/comment_hot.js @@ -3,6 +3,7 @@ const { resourceTypeMap } = require('../util/config.json') module.exports = (query, request) => { query.cookie.os = 'pc' + query.cookie.appver = '2.9.7' query.type = resourceTypeMap[query.type] const data = { rid: query.id, diff --git a/module/comment_hug_list.js b/module/comment_hug_list.js index 2b9404d..f124c74 100644 --- a/module/comment_hug_list.js +++ b/module/comment_hug_list.js @@ -1,7 +1,5 @@ const { resourceTypeMap } = require('../util/config.json') module.exports = (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' query.type = resourceTypeMap[query.type || 0] const threadId = query.type + query.sid const data = { diff --git a/module/comment_like.js b/module/comment_like.js index 0b61d6c..fff86d0 100644 --- a/module/comment_like.js +++ b/module/comment_like.js @@ -3,6 +3,7 @@ const { resourceTypeMap } = require('../util/config.json') module.exports = (query, request) => { query.cookie.os = 'pc' + query.cookie.appver = '2.9.7' query.t = query.t == 1 ? 'like' : 'unlike' query.type = resourceTypeMap[query.type] const data = { diff --git a/module/comment_music.js b/module/comment_music.js index d28cb4e..996c9bd 100644 --- a/module/comment_music.js +++ b/module/comment_music.js @@ -2,6 +2,7 @@ module.exports = (query, request) => { query.cookie.os = 'pc' + query.cookie.appver = '2.9.7' const data = { rid: query.id, limit: query.limit || 20, diff --git a/module/comment_mv.js b/module/comment_mv.js index eaba0d1..ff8f030 100644 --- a/module/comment_mv.js +++ b/module/comment_mv.js @@ -2,6 +2,7 @@ module.exports = (query, request) => { query.cookie.os = 'pc' + query.cookie.appver = '2.9.7' const data = { rid: query.id, limit: query.limit || 20, diff --git a/module/comment_new.js b/module/comment_new.js index 5288886..15e0a42 100644 --- a/module/comment_new.js +++ b/module/comment_new.js @@ -3,6 +3,7 @@ const { resourceTypeMap } = require('../util/config.json') module.exports = (query, request) => { query.cookie.os = 'pc' + query.cookie.appver = '2.9.7' query.type = resourceTypeMap[query.type] const threadId = query.type + query.id const pageSize = query.pageSize || 20 diff --git a/module/comment_playlist.js b/module/comment_playlist.js index 112e4ff..515aa45 100644 --- a/module/comment_playlist.js +++ b/module/comment_playlist.js @@ -2,6 +2,7 @@ module.exports = (query, request) => { query.cookie.os = 'pc' + query.cookie.appver = '2.9.7' const data = { rid: query.id, limit: query.limit || 20, diff --git a/module/comment_video.js b/module/comment_video.js index b7cf20d..be1cf62 100644 --- a/module/comment_video.js +++ b/module/comment_video.js @@ -2,6 +2,7 @@ module.exports = (query, request) => { query.cookie.os = 'pc' + query.cookie.appver = '2.9.7' const data = { rid: query.id, limit: query.limit || 20, diff --git a/module/dj_banner.js b/module/dj_banner.js index a8ee655..9b2cba2 100644 --- a/module/dj_banner.js +++ b/module/dj_banner.js @@ -1,8 +1,8 @@ // 电台banner module.exports = (query, request) => { - const data = {} query.cookie.os = 'pc' + query.cookie.appver = '2.9.7' return request( 'POST', `https://music.163.com/weapi/djradio/banner/get`, diff --git a/module/event_forward.js b/module/event_forward.js index bbf8ea3..e819f80 100644 --- a/module/event_forward.js +++ b/module/event_forward.js @@ -2,6 +2,7 @@ module.exports = (query, request) => { query.cookie.os = 'pc' + query.cookie.appver = '2.9.7' const data = { forwards: query.forwards, id: query.evId, diff --git a/module/follow.js b/module/follow.js index 9775ba7..abe9fdf 100644 --- a/module/follow.js +++ b/module/follow.js @@ -2,6 +2,7 @@ module.exports = (query, request) => { query.cookie.os = 'pc' + query.cookie.appver = '2.9.7' query.t = query.t == 1 ? 'follow' : 'delfollow' return request( 'POST', diff --git a/module/homepage_block_page.js b/module/homepage_block_page.js index 0f0d352..a0c197d 100644 --- a/module/homepage_block_page.js +++ b/module/homepage_block_page.js @@ -2,8 +2,6 @@ // 这个接口为移动端接口,首页-发现页,数据结构可以参考 https://github.com/hcanyz/flutter-netease-music-api/blob/master/lib/src/api/uncategorized/bean.dart#L259 HomeBlockPageWrap // query.refresh 是否刷新数据 module.exports = (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' const data = { refresh: query.refresh || false, cursor: query.cursor } return request( 'POST', diff --git a/module/homepage_dragon_ball.js b/module/homepage_dragon_ball.js index 31400b9..61f003e 100644 --- a/module/homepage_dragon_ball.js +++ b/module/homepage_dragon_ball.js @@ -4,8 +4,7 @@ // !需要登录或者游客登录,非登录返回 [] module.exports = (query, request) => { const data = {} - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' + return request( 'POST', `https://music.163.com/eapi/homepage/dragon/ball/static`, diff --git a/module/hug_comment.js b/module/hug_comment.js index 7727723..e42a130 100644 --- a/module/hug_comment.js +++ b/module/hug_comment.js @@ -1,7 +1,5 @@ const { resourceTypeMap } = require('../util/config.json') module.exports = (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' query.type = resourceTypeMap[query.type || 0] const threadId = query.type + query.sid const data = { diff --git a/module/like.js b/module/like.js index b34410c..4337b37 100644 --- a/module/like.js +++ b/module/like.js @@ -1,8 +1,6 @@ // 红心与取消红心歌曲 module.exports = (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' query.like = query.like == 'false' ? false : true const data = { alg: 'itembased', diff --git a/module/login.js b/module/login.js index 44ee1de..07c92a3 100644 --- a/module/login.js +++ b/module/login.js @@ -3,8 +3,6 @@ const CryptoJS = require('crypto-js') module.exports = async (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' const data = { username: query.email, password: query.md5_password || CryptoJS.MD5(query.password).toString(), diff --git a/module/login_cellphone.js b/module/login_cellphone.js index baec21d..47f536c 100644 --- a/module/login_cellphone.js +++ b/module/login_cellphone.js @@ -3,8 +3,6 @@ const CryptoJS = require('crypto-js') module.exports = async (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' const data = { phone: query.phone, countrycode: query.countrycode || '86', diff --git a/module/login_refresh.js b/module/login_refresh.js index 4c834b4..699c0c0 100644 --- a/module/login_refresh.js +++ b/module/login_refresh.js @@ -1,8 +1,6 @@ // 登录刷新 module.exports = async (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' let result = await request( 'POST', `https://music.163.com/weapi/login/token/refresh`, diff --git a/module/personalized_newsong.js b/module/personalized_newsong.js index 56f64a3..d580b63 100644 --- a/module/personalized_newsong.js +++ b/module/personalized_newsong.js @@ -2,6 +2,7 @@ module.exports = (query, request) => { query.cookie.os = 'pc' + query.cookie.appver = '2.9.7' const data = { type: 'recommend', limit: query.limit || 10, diff --git a/module/playlist_create.js b/module/playlist_create.js index 994c1ae..0451d70 100644 --- a/module/playlist_create.js +++ b/module/playlist_create.js @@ -2,6 +2,7 @@ module.exports = (query, request) => { query.cookie.os = 'pc' + query.cookie.appver = '2.9.7' const data = { name: query.name, privacy: query.privacy, //0 为普通歌单,10 为隐私歌单 diff --git a/module/playlist_delete.js b/module/playlist_delete.js index 9c32b98..c3a8650 100644 --- a/module/playlist_delete.js +++ b/module/playlist_delete.js @@ -2,6 +2,7 @@ module.exports = (query, request) => { query.cookie.os = 'pc' + query.cookie.appver = '2.9.7' const data = { ids: '[' + query.id + ']', } diff --git a/module/playlist_order_update.js b/module/playlist_order_update.js index da2cf26..de48256 100644 --- a/module/playlist_order_update.js +++ b/module/playlist_order_update.js @@ -2,6 +2,7 @@ module.exports = (query, request) => { query.cookie.os = 'pc' + query.cookie.appver = '2.9.7' const data = { ids: query.ids, } diff --git a/module/playlist_subscribe.js b/module/playlist_subscribe.js index 0e80445..4182ec0 100644 --- a/module/playlist_subscribe.js +++ b/module/playlist_subscribe.js @@ -7,7 +7,7 @@ module.exports = (query, request) => { } return request( 'POST', - `https://music.163.com/weapi/playlist/${query.t}`, + `https://music.163.com/api/playlist/${query.t}`, data, { crypto: 'weapi', diff --git a/module/playlist_subscribers.js b/module/playlist_subscribers.js index 84ebbab..8084d0e 100644 --- a/module/playlist_subscribers.js +++ b/module/playlist_subscribers.js @@ -8,7 +8,7 @@ module.exports = (query, request) => { } return request( 'POST', - `https://music.163.com/weapi/playlist/subscribers`, + `https://music.163.com/api/playlist/subscribers`, data, { crypto: 'weapi', diff --git a/module/playlist_track_add.js b/module/playlist_track_add.js index 5be759f..5fba0d6 100644 --- a/module/playlist_track_add.js +++ b/module/playlist_track_add.js @@ -1,5 +1,6 @@ module.exports = async (query, request) => { query.cookie.os = 'pc' + query.cookie.appver = '2.9.7' query.ids = query.ids || '' const data = { id: query.pid, diff --git a/module/playlist_track_delete.js b/module/playlist_track_delete.js index d57fe82..28a84e2 100644 --- a/module/playlist_track_delete.js +++ b/module/playlist_track_delete.js @@ -2,6 +2,7 @@ module.exports = async (query, request) => { query.cookie.os = 'pc' + query.cookie.appver = '2.9.7' query.ids = query.ids || '' const data = { id: query.id, diff --git a/module/playlist_tracks.js b/module/playlist_tracks.js index 23e9738..fda620a 100644 --- a/module/playlist_tracks.js +++ b/module/playlist_tracks.js @@ -1,7 +1,7 @@ // 收藏单曲到歌单 从歌单删除歌曲 module.exports = async (query, request) => { - // query.cookie.os = 'pc' + // const tracks = query.tracks.split(',') const data = { op: query.op, // del,add diff --git a/module/playlist_update.js b/module/playlist_update.js index 741dba1..c2d966a 100644 --- a/module/playlist_update.js +++ b/module/playlist_update.js @@ -2,6 +2,7 @@ module.exports = (query, request) => { query.cookie.os = 'pc' + query.cookie.appver = '2.9.7' query.desc = query.desc || '' query.tags = query.tags || '' const data = { diff --git a/module/rebind.js b/module/rebind.js index 2c5680a..0574feb 100644 --- a/module/rebind.js +++ b/module/rebind.js @@ -1,8 +1,6 @@ // 更换手机 module.exports = (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' const data = { captcha: query.captcha, phone: query.phone, diff --git a/module/register_cellphone.js b/module/register_cellphone.js index f8222e1..77de05c 100644 --- a/module/register_cellphone.js +++ b/module/register_cellphone.js @@ -3,6 +3,7 @@ const CryptoJS = require('crypto-js') module.exports = (query, request) => { query.cookie.os = 'pc' + query.cookie.appver = '2.9.7' const data = { captcha: query.captcha, phone: query.phone, diff --git a/module/search.js b/module/search.js index e1f5c8e..05f239f 100644 --- a/module/search.js +++ b/module/search.js @@ -16,6 +16,7 @@ module.exports = (query, request) => { realIP: query.realIP, }) } + query.cookie.os = 'pc' const data = { s: query.keywords, type: query.type || 1, // 1: 单曲, 10: 专辑, 100: 歌手, 1000: 歌单, 1002: 用户, 1004: MV, 1006: 歌词, 1009: 电台, 1014: 视频 diff --git a/module/send_album.js b/module/send_album.js index 1eaeaff..c9035ac 100644 --- a/module/send_album.js +++ b/module/send_album.js @@ -1,8 +1,6 @@ // 私信专辑 module.exports = (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' const data = { id: query.id, msg: query.msg || '', diff --git a/module/send_playlist.js b/module/send_playlist.js index d7ef55c..f837c3c 100644 --- a/module/send_playlist.js +++ b/module/send_playlist.js @@ -1,8 +1,6 @@ // 私信歌单 module.exports = (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' const data = { id: query.playlist, type: 'playlist', diff --git a/module/send_song.js b/module/send_song.js index cd996db..4ab805f 100644 --- a/module/send_song.js +++ b/module/send_song.js @@ -1,8 +1,6 @@ // 私信歌曲 module.exports = (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' const data = { id: query.id, msg: query.msg || '', diff --git a/module/send_text.js b/module/send_text.js index 8f71371..4e0ce92 100644 --- a/module/send_text.js +++ b/module/send_text.js @@ -1,8 +1,6 @@ // 私信 module.exports = (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' const data = { type: 'text', msg: query.msg, diff --git a/module/setting.js b/module/setting.js index b66b5e3..a22234a 100644 --- a/module/setting.js +++ b/module/setting.js @@ -1,8 +1,6 @@ // 设置 module.exports = (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' const data = {} return request('POST', `https://music.163.com/api/user/setting`, data, { crypto: 'weapi', diff --git a/module/share_resource.js b/module/share_resource.js index 847adb4..0efea5b 100644 --- a/module/share_resource.js +++ b/module/share_resource.js @@ -1,8 +1,6 @@ // 分享歌曲到动态 module.exports = (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' const data = { type: query.type || 'song', // song,playlist,mv,djprogram,djradio,noresource msg: query.msg || '', diff --git a/module/sheet_list.js b/module/sheet_list.js index b4df04a..426f582 100644 --- a/module/sheet_list.js +++ b/module/sheet_list.js @@ -1,7 +1,5 @@ // 乐谱列表 module.exports = (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' const data = { id: query.id, abTest: query.ab || 'b', diff --git a/module/sign_happy_info.js b/module/sign_happy_info.js index fd1b270..d91ce36 100644 --- a/module/sign_happy_info.js +++ b/module/sign_happy_info.js @@ -1,6 +1,4 @@ module.exports = (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' const data = {} return request('POST', `https://music.163.com/api/sign/happy/info`, data, { crypto: 'weapi', diff --git a/module/signin_progress.js b/module/signin_progress.js index a67ee01..51b5a52 100644 --- a/module/signin_progress.js +++ b/module/signin_progress.js @@ -1,8 +1,6 @@ // 签到进度 module.exports = (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' const data = { moduleId: query.moduleId || '1207signin-1207signin', } diff --git a/module/song_url.js b/module/song_url.js index ad427f3..5d9dbe8 100644 --- a/module/song_url.js +++ b/module/song_url.js @@ -1,22 +1,26 @@ // 歌曲链接 module.exports = async (query, request) => { - query.cookie.os = 'pc' const ids = String(query.id).split(',') const data = { - ids: JSON.stringify(ids), - br: parseInt(query.br || 999000), + trialMode: 2, + immerseType: 'ste', + ids: '["1328146041"]', + os: 'iOS', + level: 'exhigh', + deviceId: 'a8c8c4d613b999dc5d13277b43c7e925', + encodeType: 'aac', + extPlay: 0, } const res = await request( 'POST', - `https://interface3.music.163.com/eapi/song/enhance/player/url`, + `https://music.163.com/api/song/enhance/player/url/v1`, data, { - crypto: 'eapi', + crypto: 'weapi', cookie: query.cookie, ua: query.ua || '', proxy: query.proxy, realIP: query.realIP, - url: '/api/song/enhance/player/url', }, ) // 根据id排序 diff --git a/module/song_url_v1.js b/module/song_url_v1.js index 7ec3131..3809444 100644 --- a/module/song_url_v1.js +++ b/module/song_url_v1.js @@ -3,8 +3,6 @@ // 而是采用 standard, exhigh, lossless, hires, jyeffect(高清环绕声), sky(沉浸环绕声), jymaster(超清母带) 进行音质判断 module.exports = (query, request) => { - query.cookie.os = 'android' - query.cookie.appver = '8.10.05' const data = { ids: '[' + query.id + ']', level: query.level, diff --git a/module/top_list.js b/module/top_list.js index 67768e3..ebb71fd 100644 --- a/module/top_list.js +++ b/module/top_list.js @@ -1,6 +1,7 @@ // 排行榜 module.exports = (query, request) => { query.cookie.os = 'pc' + query.cookie.appver = '2.9.7' if (query.idx) { return Promise.resolve({ status: 500, diff --git a/module/user_comment_history.js b/module/user_comment_history.js index 001cdc0..0c821bf 100644 --- a/module/user_comment_history.js +++ b/module/user_comment_history.js @@ -1,6 +1,4 @@ module.exports = (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' const data = { compose_reminder: 'true', compose_hot_comment: 'true', diff --git a/module/user_event.js b/module/user_event.js index 55f43cd..2568ac6 100644 --- a/module/user_event.js +++ b/module/user_event.js @@ -1,8 +1,6 @@ // 用户动态 module.exports = (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' const data = { getcounts: true, time: query.lasttime || -1, diff --git a/module/user_update.js b/module/user_update.js index 388770e..6dad844 100644 --- a/module/user_update.js +++ b/module/user_update.js @@ -1,8 +1,6 @@ // 编辑用户信息 module.exports = (query, request) => { - query.cookie.os = 'ios' - query.cookie.appver = '9.0.65' const data = { // avatarImgId: '0', birthday: query.birthday, diff --git a/module/voice_upload.js b/module/voice_upload.js index 5c09194..3ce8b8f 100644 --- a/module/voice_upload.js +++ b/module/voice_upload.js @@ -25,8 +25,7 @@ module.exports = async (query, request) => { .replace('.' + ext, '') .replace(/\s/g, '') .replace(/\./g, '_') - // query.cookie.os = 'pc' - // query.cookie.appver = '2.9.7' + if (!query.songFile) { return Promise.reject({ status: 500, diff --git a/package.json b/package.json index 663fe41..729508a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "NeteaseCloudMusicApi", - "version": "4.16.6", + "version": "4.17.0", "description": "网易云音乐 NodeJS 版 API", "scripts": { "start": "node app.js", diff --git a/util/index.js b/util/index.js index 78129b4..74657f8 100644 --- a/util/index.js +++ b/util/index.js @@ -14,6 +14,14 @@ module.exports = { }) return obj }, + cookieObjToString(cookie) { + return Object.keys(cookie) + .map( + (key) => + `${encodeURIComponent(key)}=${encodeURIComponent(cookie[key])}`, + ) + .join('; ') + }, getRandom(num) { var random = Math.floor( (Math.random() + Math.floor(Math.random() * 9 + 1)) * diff --git a/util/request.js b/util/request.js index ac429eb..eaf4c12 100644 --- a/util/request.js +++ b/util/request.js @@ -8,18 +8,20 @@ const tunnel = require('tunnel') const fs = require('fs') const path = require('path') const tmpPath = require('os').tmpdir() +const { cookieToJson, cookieObjToString } = require('./index') const anonymous_token = fs.readFileSync( path.resolve(tmpPath, './anonymous_token'), 'utf-8', ) const { URLSearchParams, URL } = require('url') +const iosAppVersion = '9.0.65' // request.debug = true // 开启可看到更详细信息 const chooseUserAgent = (uaType) => { const userAgentMap = { mobile: - 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_2_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1', - pc: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0', + 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4.1 Mobile/15E148 Safari/604.1', + pc: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0', } if (uaType === 'mobile') { return userAgentMap.mobile @@ -27,9 +29,12 @@ const chooseUserAgent = (uaType) => { return userAgentMap.pc } const createRequest = (method, url, data = {}, options) => { + const cookie = options.cookie || {} return new Promise((resolve, reject) => { let headers = { 'User-Agent': options.ua || chooseUserAgent(options.uaType), + os: cookie.os || 'ios', + appver: cookie.appver || (cookie.os != 'pc' ? iosAppVersion : ''), } options.headers = options.headers || {} headers = { @@ -53,6 +58,9 @@ const createRequest = (method, url, data = {}, options) => { __remember_me: true, // NMTID: CryptoJS.lib.WordArray.random(16).toString(), _ntes_nuid: CryptoJS.lib.WordArray.random(16).toString(), + os: options.cookie.os || 'ios', + appver: + options.cookie.appver || (cookie.os != 'pc' ? iosAppVersion : ''), } if (url.indexOf('login') === -1) { options.cookie['NMTID'] = CryptoJS.lib.WordArray.random(16).toString() @@ -61,22 +69,20 @@ const createRequest = (method, url, data = {}, options) => { // 游客 if (!options.cookie.MUSIC_A) { options.cookie.MUSIC_A = anonymous_token - options.cookie.os = options.cookie.os || 'ios' - options.cookie.appver = options.cookie.appver || '9.0.65' } } - headers['Cookie'] = Object.keys(options.cookie) - .map( - (key) => - encodeURIComponent(key) + - '=' + - encodeURIComponent(options.cookie[key]), - ) - .join('; ') + headers['Cookie'] = cookieObjToString(options.cookie) } else if (options.cookie) { - headers['Cookie'] = options.cookie + // cookie string + const cookie = cookieToJson(options.cookie) + cookie.os = cookie.os || 'ios' + cookie.appver = cookie.appver || (cookie.os != 'pc' ? iosAppVersion : '') + headers['Cookie'] = cookieObjToString(cookie) } else { - headers['Cookie'] = '__remember_me=true; NMTID=xxx' + const cookie = cookieToJson('__remember_me=true; NMTID=xxx') + cookie.os = cookie.os || 'ios' + cookie.appver = cookie.appver || (cookie.os != 'pc' ? iosAppVersion : '') + headers['Cookie'] = cookieObjToString(cookie) } // console.log(options.cookie, headers['Cookie']) if (options.crypto === 'weapi') { @@ -98,9 +104,9 @@ const createRequest = (method, url, data = {}, options) => { const cookie = options.cookie || {} const csrfToken = cookie['__csrf'] || '' const header = { - osver: cookie.osver || '17.1.2', //系统版本 - deviceId: cookie.deviceId, //encrypt.base64.encode(imei + '\t02:00:00:00:00:00\t5106025eb79a5247\t70ffbaac7') - appver: cookie.appver || '9.0.65', // app版本 + osver: cookie.osver || '17.4.1', //系统版本 + deviceId: cookie.deviceId || '', //encrypt.base64.encode(imei + '\t02:00:00:00:00:00\t5106025eb79a5247\t70ffbaac7') + appver: cookie.appver || iosAppVersion, // app版本 versioncode: cookie.versioncode || '140', //版本号 mobilename: cookie.mobilename || '', //设备model buildver: cookie.buildver || Date.now().toString().substr(0, 10), @@ -125,6 +131,7 @@ const createRequest = (method, url, data = {}, options) => { url = url.replace(/\w*api/, 'eapi') } const answer = { status: 500, body: {}, cookie: [] } + // console.log(headers, 'headers') let settings = { method: method, url: url,