Compare commits

..
Author SHA1 Message Date
7N21 0260a8a534 Merge pull request #292 from 70CentsApple/main
fix: 修复一些 cookie 传递问题
2026-10-23 20:14:01 +08:00
70CentsApple f1acc2fda3 fix: prettier 2026-10-23 19:40:11 +08:00
70CentsApple 29c48e2ef9 fix: 修复 cookie 解析器并也尝试从请求头读 cookie 2026-10-19 14:23:57 +08:00
70CentsApple 896a62ec96 fix: 修复空 cookie 对象处理 2026-10-19 14:04:57 +08:00
Takanashi Hoshino 19c7dad6db docs: 修正文档 2026-10-17 19:29:09 +08:00
12 changed files with 234 additions and 171 deletions
+1
View File
@@ -1,5 +1,6 @@
export interface RequestBaseConfig { export interface RequestBaseConfig {
cookie?: string cookie?: string
headers?: Record<string, string | string[]>
realIP?: string // IPv4/IPv6 filled in X-Real-IP realIP?: string // IPv4/IPv6 filled in X-Real-IP
proxy?: string // HTTP proxy proxy?: string // HTTP proxy
randomCNIP?: boolean // Whether to use a random Chinese IP address filled in X-Real-IP randomCNIP?: boolean // Whether to use a random Chinese IP address filled in X-Real-IP
+1 -3
View File
@@ -25,9 +25,7 @@ moduleFiles.forEach((file) => {
obj[fn] = function (data = {}) { obj[fn] = function (data = {}) {
const cookie = const cookie =
typeof data.cookie === 'string' typeof data.cookie === 'string' ? cookieToJson(data.cookie) : data.cookie
? cookieToJson(data.cookie)
: data.cookie || {}
return fileModule( return fileModule(
{ {
+7 -2
View File
@@ -1,10 +1,15 @@
const QRCode = require('qrcode') const QRCode = require('qrcode')
const { generateChainId } = require('../util/index') const { generateChainId, getCookieHeader, hasCookie } = require('../util/index')
module.exports = (query) => { module.exports = (query) => {
return new Promise(async (resolve) => { return new Promise(async (resolve) => {
const platform = query.platform || 'pc' const platform = query.platform || 'pc'
const cookie = query.cookie || '' const headerCookie = getCookieHeader(query.headers)
const cookie = hasCookie(query.cookie)
? query.cookie
: hasCookie(headerCookie)
? headerCookie
: ''
// 构建基础URL // 构建基础URL
let url = `https://music.163.com/login?codekey=${query.key}` let url = `https://music.163.com/login?codekey=${query.key}`
+10 -2
View File
@@ -1,18 +1,26 @@
// 听歌打卡 // 听歌打卡
const createOption = require('../util/option.js') const createOption = require('../util/option.js')
const { getCookieHeader, hasCookie } = require('../util/index')
const { APP_CONF } = require('../util/config.json') const { APP_CONF } = require('../util/config.json')
const DOMAIN = APP_CONF.clDomian const DOMAIN = APP_CONF.clDomian
module.exports = async (query, request) => { module.exports = async (query, request) => {
// 注入 os=osx 的 cookie // 注入 os=osx 的 cookie
let cookie = query.cookie || '' const headerCookie = getCookieHeader(query.headers)
let cookie = hasCookie(query.cookie)
? query.cookie
: hasCookie(headerCookie)
? headerCookie
: process.env.NETEASE_COOKIE || ''
if (typeof cookie === 'object') { if (typeof cookie === 'object') {
cookie = Object.assign({ os: 'osx' }, cookie) cookie = Object.assign({ os: 'osx' }, cookie)
} else if (typeof cookie === 'string') { } else if (typeof cookie === 'string') {
if (cookie.indexOf('os=') > -1) { if (cookie.indexOf('os=') > -1) {
cookie = cookie.replace(/os=[^;]+/g, 'os=osx') cookie = cookie.replace(/os=[^;]+/g, 'os=osx')
} else { } else if (cookie) {
cookie = cookie + '; os=osx' cookie = cookie + '; os=osx'
} else {
cookie = 'os=osx'
} }
} else { } else {
cookie = 'os=osx' cookie = 'os=osx'
+7 -1
View File
@@ -13,6 +13,7 @@ const {
buildMetaJson, buildMetaJson,
doUpload, doUpload,
} = require('../util/ncbl') } = require('../util/ncbl')
const { getCookieHeader, hasCookie } = require('../util/index')
module.exports = async (query, request) => { module.exports = async (query, request) => {
// --- 参数校验 --- // --- 参数校验 ---
@@ -32,7 +33,12 @@ module.exports = async (query, request) => {
const sourceName = query.source || 'list' const sourceName = query.source || 'list'
// --- 解析认证上下文 --- // --- 解析认证上下文 ---
const rawCookie = query.cookie || '' const headerCookie = getCookieHeader(query.headers)
const rawCookie = hasCookie(query.cookie)
? query.cookie
: hasCookie(headerCookie)
? headerCookie
: process.env.NETEASE_COOKIE || ''
const cookieObj = parseCookie(rawCookie) const cookieObj = parseCookie(rawCookie)
cookieObj.os = 'pc' cookieObj.os = 'pc'
const ctx = extractContext(cookieObj) const ctx = extractContext(cookieObj)
+1 -1
View File
@@ -78,7 +78,7 @@
"@neteasecloudmusicapienhanced/unblockmusic-utils": "^0.4.5", "@neteasecloudmusicapienhanced/unblockmusic-utils": "^0.4.5",
"axios": "^1.20.0", "axios": "^1.20.0",
"crypto-js": "^4.2.0", "crypto-js": "^4.2.0",
"dotenv": "^18.0.7", "dotenv": "^17.4.2",
"express": "^5.2.1", "express": "^5.2.1",
"express-fileupload": "^1.5.2", "express-fileupload": "^1.5.2",
"fzstd": "^0.1.1", "fzstd": "^0.1.1",
+130 -137
View File
@@ -10,19 +10,19 @@ importers:
dependencies: dependencies:
'@neteasecloudmusicapienhanced/unblockmusic-utils': '@neteasecloudmusicapienhanced/unblockmusic-utils':
specifier: ^0.4.5 specifier: ^0.4.5
version: 0.4.5([email protected]([email protected]))([email protected]) version: 0.4.5
axios: axios:
specifier: ^1.20.0 specifier: ^1.20.0
version: 1.20.0([email protected]([email protected]))([email protected]) version: 1.20.0
crypto-js: crypto-js:
specifier: ^4.2.0 specifier: ^4.2.0
version: 4.2.0 version: 4.2.0
dotenv: dotenv:
specifier: ^18.0.7 specifier: ^17.4.2
version: 18.0.7 version: 17.4.2
express: express:
specifier: ^5.2.1 specifier: ^5.2.1
version: 5.2.1([email protected]) version: 5.2.1
express-fileupload: express-fileupload:
specifier: ^1.5.2 specifier: ^1.5.2
version: 1.5.2 version: 1.5.2
@@ -34,16 +34,16 @@ importers:
version: 0.1.0 version: 0.1.0
jsdom: jsdom:
specifier: ^24.1.3 specifier: ^24.1.3
version: 24.1.3([email protected]) version: 24.1.3
music-metadata: music-metadata:
specifier: ^11.16.1 specifier: ^11.16.1
version: 11.16.1([email protected]) version: 11.16.1
node-forge: node-forge:
specifier: ^1.4.0 specifier: ^1.4.0
version: 1.4.0 version: 1.4.0
pac-proxy-agent: pac-proxy-agent:
specifier: ^7.2.0 specifier: ^7.2.0
version: 7.2.0([email protected]) version: 7.2.0
qrcode: qrcode:
specifier: ^1.5.4 specifier: ^1.5.4
version: 1.5.4 version: 1.5.4
@@ -62,7 +62,7 @@ importers:
devDependencies: devDependencies:
'@eslint/eslintrc': '@eslint/eslintrc':
specifier: ^3.3.7 specifier: ^3.3.7
version: 3.3.7([email protected]) version: 3.3.7
'@eslint/js': '@eslint/js':
specifier: ^9.39.5 specifier: ^9.39.5
version: 9.39.5 version: 9.39.5
@@ -80,22 +80,22 @@ importers:
version: 25.9.2 version: 25.9.2
'@typescript-eslint/eslint-plugin': '@typescript-eslint/eslint-plugin':
specifier: ^8.71.0 specifier: ^8.71.0
version: 8.71.0(@typescript-eslint/[email protected]([email protected]([email protected]))([email protected])([email protected]))([email protected]([email protected]))([email protected])([email protected]) version: 8.71.0(@typescript-eslint/[email protected]([email protected])([email protected]))([email protected])([email protected])
'@typescript-eslint/parser': '@typescript-eslint/parser':
specifier: ^8.71.0 specifier: ^8.71.0
version: 8.71.0([email protected]([email protected]))([email protected])([email protected]) version: 8.71.0([email protected])([email protected])
eslint: eslint:
specifier: ^9.39.5 specifier: ^9.39.5
version: 9.39.5([email protected]) version: 9.39.5
eslint-config-prettier: eslint-config-prettier:
specifier: ^10.1.8 specifier: ^10.1.8
version: 10.1.8([email protected]([email protected])) version: 10.1.8([email protected])
eslint-plugin-html: eslint-plugin-html:
specifier: ^8.2.1 specifier: ^8.2.1
version: 8.2.1 version: 8.2.1
eslint-plugin-prettier: eslint-plugin-prettier:
specifier: ^5.5.6 specifier: ^5.5.6
version: 5.5.6([email protected]([email protected]([email protected])))([email protected]([email protected]))([email protected]) version: 5.5.6([email protected]([email protected]))([email protected])([email protected])
globals: globals:
specifier: ^17.13.0 specifier: ^17.13.0
version: 17.13.0 version: 17.13.0
@@ -116,7 +116,7 @@ importers:
version: 3.1.14 version: 3.1.14
pkg: pkg:
specifier: ^5.8.1 specifier: ^5.8.1
version: 5.8.1([email protected]) version: 5.8.1
power-assert: power-assert:
specifier: ^1.6.1 specifier: ^1.6.1
version: 1.6.1 version: 1.6.1
@@ -863,11 +863,6 @@ packages:
resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==}
engines: {node: '>=12'} engines: {node: '>=12'}
[email protected]:
resolution: {integrity: sha512-QEvMEF8ca3GNZJJnAbOgxpj5ULhBvnMcURp+XKrtvqFNPgjBvYoswQ0Jl2cO7JzCjxZjJhr9ZuIEhlrRxMft/Q==}
engines: {node: '>=12'}
hasBin: true
[email protected]: [email protected]:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@@ -2880,17 +2875,17 @@ snapshots:
'@csstools/[email protected]': {} '@csstools/[email protected]': {}
'@eslint-community/[email protected]([email protected]([email protected]))': '@eslint-community/[email protected]([email protected])':
dependencies: dependencies:
eslint: 9.39.5([email protected]) eslint: 9.39.5
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
'@eslint-community/[email protected]': {} '@eslint-community/[email protected]': {}
'@eslint/[email protected]([email protected])': '@eslint/[email protected]':
dependencies: dependencies:
'@eslint/object-schema': 2.1.7 '@eslint/object-schema': 2.1.7
debug: 4.4.3([email protected]) debug: 4.4.3
minimatch: 3.1.5 minimatch: 3.1.5
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -2903,10 +2898,10 @@ snapshots:
dependencies: dependencies:
'@types/json-schema': 7.0.15 '@types/json-schema': 7.0.15
'@eslint/[email protected]([email protected])': '@eslint/[email protected]':
dependencies: dependencies:
ajv: 6.15.0 ajv: 6.15.0
debug: 4.4.3([email protected]) debug: 4.4.3
espree: 10.4.0 espree: 10.4.0
globals: 14.0.0 globals: 14.0.0
ignore: 5.3.2 ignore: 5.3.2
@@ -2965,12 +2960,12 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2 '@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.6.0 '@jridgewell/sourcemap-codec': 1.6.0
'@neteasecloudmusicapienhanced/[email protected]([email protected]([email protected]))([email protected])': '@neteasecloudmusicapienhanced/[email protected]':
dependencies: dependencies:
'@unblockneteasemusic/server': 0.28.0 '@unblockneteasemusic/server': 0.28.0
axios: 1.20.0([email protected]([email protected]))([email protected]) axios: 1.20.0
dotenv: 17.4.2 dotenv: 17.4.2
express: 4.22.3([email protected]) express: 4.22.3
https: 1.0.0 https: 1.0.0
transitivePeerDependencies: transitivePeerDependencies:
- debug - debug
@@ -2993,9 +2988,9 @@ snapshots:
'@pkgr/[email protected]': {} '@pkgr/[email protected]': {}
'@tokenizer/[email protected]([email protected])': '@tokenizer/[email protected]':
dependencies: dependencies:
debug: 4.4.3([email protected]) debug: 4.4.3
token-types: 6.1.2 token-types: 6.1.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -3060,15 +3055,15 @@ snapshots:
'@types/http-errors': 2.0.5 '@types/http-errors': 2.0.5
'@types/node': 25.9.2 '@types/node': 25.9.2
'@typescript-eslint/[email protected](@typescript-eslint/[email protected]([email protected]([email protected]))([email protected])([email protected]))([email protected]([email protected]))([email protected])([email protected])': '@typescript-eslint/[email protected](@typescript-eslint/[email protected]([email protected])([email protected]))([email protected])([email protected])':
dependencies: dependencies:
'@eslint-community/regexpp': 4.12.2 '@eslint-community/regexpp': 4.12.2
'@typescript-eslint/parser': 8.71.0([email protected]([email protected]))([email protected])([email protected]) '@typescript-eslint/parser': 8.71.0([email protected])([email protected])
'@typescript-eslint/scope-manager': 8.71.0 '@typescript-eslint/scope-manager': 8.71.0
'@typescript-eslint/type-utils': 8.71.0([email protected]([email protected]))([email protected])([email protected]) '@typescript-eslint/type-utils': 8.71.0([email protected])([email protected])
'@typescript-eslint/utils': 8.71.0([email protected]([email protected]))([email protected])([email protected]) '@typescript-eslint/utils': 8.71.0([email protected])([email protected])
'@typescript-eslint/visitor-keys': 8.71.0 '@typescript-eslint/visitor-keys': 8.71.0
eslint: 9.39.5([email protected]) eslint: 9.39.5
ignore: 7.0.11 ignore: 7.0.11
natural-compare: 1.4.0 natural-compare: 1.4.0
ts-api-utils: 2.5.0([email protected]) ts-api-utils: 2.5.0([email protected])
@@ -3076,23 +3071,23 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/[email protected]([email protected]([email protected]))([email protected])([email protected])': '@typescript-eslint/[email protected]([email protected])([email protected])':
dependencies: dependencies:
'@typescript-eslint/scope-manager': 8.71.0 '@typescript-eslint/scope-manager': 8.71.0
'@typescript-eslint/types': 8.71.0 '@typescript-eslint/types': 8.71.0
'@typescript-eslint/typescript-estree': 8.71.0([email protected])([email protected]) '@typescript-eslint/typescript-estree': 8.71.0([email protected])
'@typescript-eslint/visitor-keys': 8.71.0 '@typescript-eslint/visitor-keys': 8.71.0
debug: 4.4.3([email protected]) debug: 4.4.3
eslint: 9.39.5([email protected]) eslint: 9.39.5
typescript: 5.9.3 typescript: 5.9.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/[email protected]([email protected])([email protected])': '@typescript-eslint/[email protected]([email protected])':
dependencies: dependencies:
'@typescript-eslint/tsconfig-utils': 8.71.0([email protected]) '@typescript-eslint/tsconfig-utils': 8.71.0([email protected])
'@typescript-eslint/types': 8.71.0 '@typescript-eslint/types': 8.71.0
debug: 4.4.3([email protected]) debug: 4.4.3
typescript: 5.9.3 typescript: 5.9.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -3106,13 +3101,13 @@ snapshots:
dependencies: dependencies:
typescript: 5.9.3 typescript: 5.9.3
'@typescript-eslint/[email protected]([email protected]([email protected]))([email protected])([email protected])': '@typescript-eslint/[email protected]([email protected])([email protected])':
dependencies: dependencies:
'@typescript-eslint/types': 8.71.0 '@typescript-eslint/types': 8.71.0
'@typescript-eslint/typescript-estree': 8.71.0([email protected])([email protected]) '@typescript-eslint/typescript-estree': 8.71.0([email protected])
'@typescript-eslint/utils': 8.71.0([email protected]([email protected]))([email protected])([email protected]) '@typescript-eslint/utils': 8.71.0([email protected])([email protected])
debug: 4.4.3([email protected]) debug: 4.4.3
eslint: 9.39.5([email protected]) eslint: 9.39.5
ts-api-utils: 2.5.0([email protected]) ts-api-utils: 2.5.0([email protected])
typescript: 5.9.3 typescript: 5.9.3
transitivePeerDependencies: transitivePeerDependencies:
@@ -3120,13 +3115,13 @@ snapshots:
'@typescript-eslint/[email protected]': {} '@typescript-eslint/[email protected]': {}
'@typescript-eslint/[email protected]([email protected])([email protected])': '@typescript-eslint/[email protected]([email protected])':
dependencies: dependencies:
'@typescript-eslint/project-service': 8.71.0([email protected])([email protected]) '@typescript-eslint/project-service': 8.71.0([email protected])
'@typescript-eslint/tsconfig-utils': 8.71.0([email protected]) '@typescript-eslint/tsconfig-utils': 8.71.0([email protected])
'@typescript-eslint/types': 8.71.0 '@typescript-eslint/types': 8.71.0
'@typescript-eslint/visitor-keys': 8.71.0 '@typescript-eslint/visitor-keys': 8.71.0
debug: 4.4.3([email protected]) debug: 4.4.3
minimatch: 10.2.6 minimatch: 10.2.6
semver: 7.8.5 semver: 7.8.5
tinyglobby: 0.2.17 tinyglobby: 0.2.17
@@ -3135,13 +3130,13 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/[email protected]([email protected]([email protected]))([email protected])([email protected])': '@typescript-eslint/[email protected]([email protected])([email protected])':
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.10.1([email protected]([email protected])) '@eslint-community/eslint-utils': 4.10.1([email protected])
'@typescript-eslint/scope-manager': 8.71.0 '@typescript-eslint/scope-manager': 8.71.0
'@typescript-eslint/types': 8.71.0 '@typescript-eslint/types': 8.71.0
'@typescript-eslint/typescript-estree': 8.71.0([email protected])([email protected]) '@typescript-eslint/typescript-estree': 8.71.0([email protected])
eslint: 9.39.5([email protected]) eslint: 9.39.5
typescript: 5.9.3 typescript: 5.9.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -3177,9 +3172,9 @@ snapshots:
[email protected]: {} [email protected]: {}
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
debug: 4.4.3([email protected]) debug: 4.4.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -3265,11 +3260,11 @@ snapshots:
dependencies: dependencies:
possible-typed-array-names: 1.1.0 possible-typed-array-names: 1.1.0
[email protected]([email protected]([email protected]))([email protected]): [email protected]:
dependencies: dependencies:
follow-redirects: 1.16.0([email protected]([email protected])) follow-redirects: 1.16.0
form-data: 4.0.6 form-data: 4.0.6
https-proxy-agent: 5.0.1([email protected]) https-proxy-agent: 5.0.1
proxy-from-env: 2.1.0 proxy-from-env: 2.1.0
transitivePeerDependencies: transitivePeerDependencies:
- debug - debug
@@ -3291,11 +3286,11 @@ snapshots:
inherits: 2.0.4 inherits: 2.0.4
readable-stream: 3.6.2 readable-stream: 3.6.2
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
bytes: 3.1.2 bytes: 3.1.2
content-type: 1.0.5 content-type: 1.0.5
debug: 2.6.9([email protected]) debug: 2.6.9
depd: 2.0.0 depd: 2.0.0
destroy: 1.2.0 destroy: 1.2.0
http-errors: 2.0.1 http-errors: 2.0.1
@@ -3308,11 +3303,11 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
bytes: 3.1.2 bytes: 3.1.2
content-type: 2.1.0 content-type: 2.1.0
debug: 4.4.3([email protected]) debug: 4.4.3
http-errors: 2.0.1 http-errors: 2.0.1
iconv-lite: 0.7.3 iconv-lite: 0.7.3
on-finished: 2.4.1 on-finished: 2.4.1
@@ -3537,11 +3532,13 @@ snapshots:
[email protected]: {} [email protected]: {}
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
ms: 2.0.0 ms: 2.0.0
optionalDependencies:
supports-color: 5.5.0 [email protected]:
dependencies:
ms: 2.1.3
[email protected]([email protected]): [email protected]([email protected]):
dependencies: dependencies:
@@ -3634,8 +3631,6 @@ snapshots:
[email protected]: {} [email protected]: {}
[email protected]: {}
[email protected]: [email protected]:
dependencies: dependencies:
call-bind-apply-helpers: 1.0.2 call-bind-apply-helpers: 1.0.2
@@ -3855,22 +3850,22 @@ snapshots:
esrecurse: 4.3.0 esrecurse: 4.3.0
estraverse: 4.3.0 estraverse: 4.3.0
[email protected]([email protected]([email protected])): [email protected]([email protected]):
dependencies: dependencies:
eslint: 9.39.5([email protected]) eslint: 9.39.5
[email protected]: [email protected]:
dependencies: dependencies:
htmlparser2: 10.1.0 htmlparser2: 10.1.0
[email protected]([email protected]([email protected]([email protected])))([email protected]([email protected]))([email protected]): [email protected]([email protected]([email protected]))([email protected])([email protected]):
dependencies: dependencies:
eslint: 9.39.5([email protected]) eslint: 9.39.5
prettier: 3.9.9 prettier: 3.9.9
prettier-linter-helpers: 1.0.1 prettier-linter-helpers: 1.0.1
synckit: 0.11.13 synckit: 0.11.13
optionalDependencies: optionalDependencies:
eslint-config-prettier: 10.1.8([email protected]([email protected])) eslint-config-prettier: 10.1.8([email protected])
[email protected]: [email protected]:
dependencies: dependencies:
@@ -3883,14 +3878,14 @@ snapshots:
[email protected]: {} [email protected]: {}
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.10.1([email protected]([email protected])) '@eslint-community/eslint-utils': 4.10.1([email protected])
'@eslint-community/regexpp': 4.12.2 '@eslint-community/regexpp': 4.12.2
'@eslint/config-array': 0.21.2([email protected]) '@eslint/config-array': 0.21.2
'@eslint/config-helpers': 0.4.2 '@eslint/config-helpers': 0.4.2
'@eslint/core': 0.17.0 '@eslint/core': 0.17.0
'@eslint/eslintrc': 3.3.7([email protected]) '@eslint/eslintrc': 3.3.7
'@eslint/js': 9.39.5 '@eslint/js': 9.39.5
'@eslint/plugin-kit': 0.4.1 '@eslint/plugin-kit': 0.4.1
'@humanfs/node': 0.16.8 '@humanfs/node': 0.16.8
@@ -3900,7 +3895,7 @@ snapshots:
ajv: 6.15.0 ajv: 6.15.0
chalk: 4.1.2 chalk: 4.1.2
cross-spawn: 7.0.6 cross-spawn: 7.0.6
debug: 4.4.3([email protected]) debug: 4.4.3
escape-string-regexp: 4.0.0 escape-string-regexp: 4.0.0
eslint-scope: 8.4.0 eslint-scope: 8.4.0
eslint-visitor-keys: 4.2.1 eslint-visitor-keys: 4.2.1
@@ -4013,21 +4008,21 @@ snapshots:
dependencies: dependencies:
busboy: 1.6.0 busboy: 1.6.0
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
accepts: 1.3.8 accepts: 1.3.8
array-flatten: 1.1.1 array-flatten: 1.1.1
body-parser: 1.20.8([email protected]) body-parser: 1.20.8
content-disposition: 0.5.4 content-disposition: 0.5.4
content-type: 1.0.5 content-type: 1.0.5
cookie: 0.7.2 cookie: 0.7.2
cookie-signature: 1.0.7 cookie-signature: 1.0.7
debug: 2.6.9([email protected]) debug: 2.6.9
depd: 2.0.0 depd: 2.0.0
encodeurl: 2.0.0 encodeurl: 2.0.0
escape-html: 1.0.3 escape-html: 1.0.3
etag: 1.8.1 etag: 1.8.1
finalhandler: 1.3.2([email protected]) finalhandler: 1.3.2
fresh: 0.5.2 fresh: 0.5.2
http-errors: 2.0.1 http-errors: 2.0.1
merge-descriptors: 1.0.3 merge-descriptors: 1.0.3
@@ -4039,8 +4034,8 @@ snapshots:
qs: 6.16.0 qs: 6.16.0
range-parser: 1.2.1 range-parser: 1.2.1
safe-buffer: 5.2.1 safe-buffer: 5.2.1
send: 0.19.2([email protected]) send: 0.19.2
serve-static: 1.16.3([email protected]) serve-static: 1.16.3
setprototypeof: 1.2.0 setprototypeof: 1.2.0
statuses: 2.0.2 statuses: 2.0.2
type-is: 1.6.18 type-is: 1.6.18
@@ -4049,20 +4044,20 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
accepts: 2.0.0 accepts: 2.0.0
body-parser: 2.3.0([email protected]) body-parser: 2.3.0
content-disposition: 1.1.0 content-disposition: 1.1.0
content-type: 1.0.5 content-type: 1.0.5
cookie: 0.7.2 cookie: 0.7.2
cookie-signature: 1.2.2 cookie-signature: 1.2.2
debug: 4.4.3([email protected]) debug: 4.4.3
depd: 2.0.0 depd: 2.0.0
encodeurl: 2.0.0 encodeurl: 2.0.0
escape-html: 1.0.3 escape-html: 1.0.3
etag: 1.8.1 etag: 1.8.1
finalhandler: 2.1.1([email protected]) finalhandler: 2.1.1
fresh: 2.0.0 fresh: 2.0.0
http-errors: 2.0.1 http-errors: 2.0.1
merge-descriptors: 2.0.0 merge-descriptors: 2.0.0
@@ -4073,9 +4068,9 @@ snapshots:
proxy-addr: 2.0.8 proxy-addr: 2.0.8
qs: 6.16.0 qs: 6.16.0
range-parser: 1.3.0 range-parser: 1.3.0
router: 2.2.0([email protected]) router: 2.2.0
send: 1.2.1([email protected]) send: 1.2.1
serve-static: 2.2.1([email protected]) serve-static: 2.2.1
statuses: 2.0.2 statuses: 2.0.2
type-is: 2.1.0 type-is: 2.1.0
vary: 1.1.2 vary: 1.1.2
@@ -4118,9 +4113,9 @@ snapshots:
dependencies: dependencies:
flat-cache: 4.0.1 flat-cache: 4.0.1
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
'@tokenizer/inflate': 0.4.1([email protected]) '@tokenizer/inflate': 0.4.1
strtok3: 10.3.5 strtok3: 10.3.5
token-types: 6.1.2 token-types: 6.1.2
uint8array-extras: 1.6.0 uint8array-extras: 1.6.0
@@ -4131,9 +4126,9 @@ snapshots:
dependencies: dependencies:
to-regex-range: 5.0.1 to-regex-range: 5.0.1
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
debug: 2.6.9([email protected]) debug: 2.6.9
encodeurl: 2.0.0 encodeurl: 2.0.0
escape-html: 1.0.3 escape-html: 1.0.3
on-finished: 2.4.1 on-finished: 2.4.1
@@ -4143,9 +4138,9 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
debug: 4.4.3([email protected]) debug: 4.4.3
encodeurl: 2.0.0 encodeurl: 2.0.0
escape-html: 1.0.3 escape-html: 1.0.3
on-finished: 2.4.1 on-finished: 2.4.1
@@ -4175,9 +4170,7 @@ snapshots:
[email protected]: {} [email protected]: {}
[email protected]([email protected]([email protected])): [email protected]: {}
optionalDependencies:
debug: 4.4.3([email protected])
[email protected]: [email protected]:
dependencies: dependencies:
@@ -4267,11 +4260,11 @@ snapshots:
es-errors: 1.3.0 es-errors: 1.3.0
get-intrinsic: 1.3.0 get-intrinsic: 1.3.0
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
basic-ftp: 5.3.1 basic-ftp: 5.3.1
data-uri-to-buffer: 6.0.2 data-uri-to-buffer: 6.0.2
debug: 4.4.3([email protected]) debug: 4.4.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -4365,24 +4358,24 @@ snapshots:
statuses: 2.0.2 statuses: 2.0.2
toidentifier: 1.0.1 toidentifier: 1.0.1
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
agent-base: 7.1.4 agent-base: 7.1.4
debug: 4.4.3([email protected]) debug: 4.4.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
agent-base: 6.0.2([email protected]) agent-base: 6.0.2
debug: 4.4.3([email protected]) debug: 4.4.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
agent-base: 7.1.4 agent-base: 7.1.4
debug: 4.4.3([email protected]) debug: 4.4.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -4603,15 +4596,15 @@ snapshots:
dependencies: dependencies:
argparse: 2.0.1 argparse: 2.0.1
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
cssstyle: 4.6.0 cssstyle: 4.6.0
data-urls: 5.0.0 data-urls: 5.0.0
decimal.js: 10.6.0 decimal.js: 10.6.0
form-data: 4.0.6 form-data: 4.0.6
html-encoding-sniffer: 4.0.0 html-encoding-sniffer: 4.0.0
http-proxy-agent: 7.0.2([email protected]) http-proxy-agent: 7.0.2
https-proxy-agent: 7.0.6([email protected]) https-proxy-agent: 7.0.6
is-potential-custom-element-name: 1.0.1 is-potential-custom-element-name: 1.0.1
nwsapi: 2.2.28 nwsapi: 2.2.28
parse5: 7.3.0 parse5: 7.3.0
@@ -4804,13 +4797,13 @@ snapshots:
once: 1.4.0 once: 1.4.0
readable-stream: 3.6.2 readable-stream: 3.6.2
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
'@borewit/text-codec': 0.2.2 '@borewit/text-codec': 0.2.2
'@tokenizer/token': 0.3.0 '@tokenizer/token': 0.3.0
content-type: 2.1.0 content-type: 2.1.0
debug: 4.4.3([email protected]) debug: 4.4.3
file-type: 21.3.4([email protected]) file-type: 21.3.4
media-typer: 2.0.0 media-typer: 2.0.0
strtok3: 10.3.5 strtok3: 10.3.5
token-types: 6.1.2 token-types: 6.1.2
@@ -4942,16 +4935,16 @@ snapshots:
[email protected]: {} [email protected]: {}
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
'@tootallnate/quickjs-emscripten': 0.23.0 '@tootallnate/quickjs-emscripten': 0.23.0
agent-base: 7.1.4 agent-base: 7.1.4
debug: 4.4.3([email protected]) debug: 4.4.3
get-uri: 6.0.5([email protected]) get-uri: 6.0.5
http-proxy-agent: 7.0.2([email protected]) http-proxy-agent: 7.0.2
https-proxy-agent: 7.0.6([email protected]) https-proxy-agent: 7.0.6
pac-resolver: 7.0.1 pac-resolver: 7.0.1
socks-proxy-agent: 8.0.5([email protected]) socks-proxy-agent: 8.0.5
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -5030,11 +5023,11 @@ snapshots:
quick-format-unescaped: 4.0.4 quick-format-unescaped: 4.0.4
sonic-boom: 1.4.1 sonic-boom: 1.4.1
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
chalk: 4.1.2 chalk: 4.1.2
fs-extra: 9.1.0 fs-extra: 9.1.0
https-proxy-agent: 5.0.1([email protected]) https-proxy-agent: 5.0.1
node-fetch: 2.7.0 node-fetch: 2.7.0
progress: 2.0.3 progress: 2.0.3
semver: 7.8.5 semver: 7.8.5
@@ -5044,7 +5037,7 @@ snapshots:
- encoding - encoding
- supports-color - supports-color
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
'@babel/generator': 7.18.2 '@babel/generator': 7.18.2
'@babel/parser': 7.18.4 '@babel/parser': 7.18.4
@@ -5056,7 +5049,7 @@ snapshots:
is-core-module: 2.9.0 is-core-module: 2.9.0
minimist: 1.2.8 minimist: 1.2.8
multistream: 4.1.0 multistream: 4.1.0
pkg-fetch: 3.4.2([email protected]) pkg-fetch: 3.4.2
prebuild-install: 7.1.1 prebuild-install: 7.1.1
resolve: 1.22.12 resolve: 1.22.12
stream-meter: 1.0.4 stream-meter: 1.0.4
@@ -5297,9 +5290,9 @@ snapshots:
[email protected]: {} [email protected]: {}
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
debug: 4.4.3([email protected]) debug: 4.4.3
depd: 2.0.0 depd: 2.0.0
is-promise: 4.0.0 is-promise: 4.0.0
parseurl: 1.3.3 parseurl: 1.3.3
@@ -5352,9 +5345,9 @@ snapshots:
[email protected]: {} [email protected]: {}
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
debug: 2.6.9([email protected]) debug: 2.6.9
depd: 2.0.0 depd: 2.0.0
destroy: 1.2.0 destroy: 1.2.0
encodeurl: 2.0.0 encodeurl: 2.0.0
@@ -5370,9 +5363,9 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
debug: 4.4.3([email protected]) debug: 4.4.3
encodeurl: 2.0.0 encodeurl: 2.0.0
escape-html: 1.0.3 escape-html: 1.0.3
etag: 1.8.1 etag: 1.8.1
@@ -5390,21 +5383,21 @@ snapshots:
dependencies: dependencies:
randombytes: 2.1.0 randombytes: 2.1.0
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
encodeurl: 2.0.0 encodeurl: 2.0.0
escape-html: 1.0.3 escape-html: 1.0.3
parseurl: 1.3.3 parseurl: 1.3.3
send: 0.19.2([email protected]) send: 0.19.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
encodeurl: 2.0.0 encodeurl: 2.0.0
escape-html: 1.0.3 escape-html: 1.0.3
parseurl: 1.3.3 parseurl: 1.3.3
send: 1.2.1([email protected]) send: 1.2.1
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -5496,10 +5489,10 @@ snapshots:
[email protected]: {} [email protected]: {}
[email protected]([email protected]): [email protected]:
dependencies: dependencies:
agent-base: 7.1.4 agent-base: 7.1.4
debug: 4.4.3([email protected]) debug: 4.4.3
socks: 2.8.10 socks: 2.8.10
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
+3 -3
View File
@@ -5932,7 +5932,7 @@ let data = encodeURIComponent(
**调用例子 :** `/fans/group/feed/recommend?fansGroupId=1872529203038486609&size=10&cursor=0` **调用例子 :** `/fans/group/feed/recommend?fansGroupId=1872529203038486609&size=10&cursor=0`
## 每日指定风格歌曲推荐 ### 每日指定风格歌曲推荐
说明 : 调用此接口 , 可获取每日指定风格歌曲推荐 说明 : 调用此接口 , 可获取每日指定风格歌曲推荐
@@ -5940,7 +5940,7 @@ let data = encodeURIComponent(
**调用例子 :** `/recommend/category/songs` **调用例子 :** `/recommend/category/songs`
## 获取每日指定风格歌曲推荐的风格列表 ### 获取每日指定风格歌曲推荐的风格列表
说明 : 调用此接口 , 可获取每日指定风格歌曲推荐的风格列表 说明 : 调用此接口 , 可获取每日指定风格歌曲推荐的风格列表
@@ -5948,7 +5948,7 @@ let data = encodeURIComponent(
**调用例子 :** `/recommend/category/configs` **调用例子 :** `/recommend/category/configs`
## 设置每日指定风格歌曲推荐的风格 ### 设置每日指定风格歌曲推荐的风格
说明 : 调用此接口 , 可设置每日指定风格歌曲推荐的风格 说明 : 调用此接口 , 可设置每日指定风格歌曲推荐的风格
+17 -10
View File
@@ -6,7 +6,7 @@ const request = require('./util/request')
const packageJSON = require('./package.json') const packageJSON = require('./package.json')
const exec = require('child_process').exec const exec = require('child_process').exec
const cache = require('./util/apicache').middleware const cache = require('./util/apicache').middleware
const { cookieToJson } = require('./util/index') const { cookieToJson, getCookieHeader, hasCookie } = require('./util/index')
const fileUpload = require('express-fileupload') const fileUpload = require('express-fileupload')
const decode = require('safe-decode-uri-component') const decode = require('safe-decode-uri-component')
const logger = require('./util/logger.js') const logger = require('./util/logger.js')
@@ -225,8 +225,9 @@ async function constructServer(moduleDefs) {
*/ */
app.use((req, _, next) => { app.use((req, _, next) => {
req.cookies = {} req.cookies = {}
//;(req.headers.cookie || '').split(/\s*;\s*/).forEach((pair) => { // Polynomial regular expression // getCookieHeader(req.headers)
;(req.headers.cookie || '').split(/;\s+|(?<!\s)\s+$/g).forEach((pair) => { .split(';')
.forEach((pair) => {
let crack = pair.indexOf('=') let crack = pair.indexOf('=')
if (crack < 1 || crack == pair.length - 1) return if (crack < 1 || crack == pair.length - 1) return
req.cookies[decode(pair.slice(0, crack)).trim()] = decode( req.cookies[decode(pair.slice(0, crack)).trim()] = decode(
@@ -291,13 +292,19 @@ async function constructServer(moduleDefs) {
} }
}) })
let query = Object.assign( const queryCookie = req.query && req.query.cookie
{}, const bodyCookie = req.body && req.body.cookie
{ cookie: req.cookies }, const fileCookie = req.files && req.files.cookie
req.query, const cookie = hasCookie(fileCookie)
req.body, ? fileCookie
req.files, : hasCookie(bodyCookie)
) ? bodyCookie
: hasCookie(queryCookie)
? queryCookie
: req.cookies
const query = Object.assign({}, req.query, req.body, req.files, {
cookie,
})
try { try {
let usedCrypto = '' let usedCrypto = ''
+33 -4
View File
@@ -94,15 +94,42 @@ module.exports = {
// 优化:使用for循环替代forEach,性能更好 // 优化:使用for循环替代forEach,性能更好
for (let i = 0, len = cookieArr.length; i < len; i++) { for (let i = 0, len = cookieArr.length; i < len; i++) {
let item = cookieArr[i] let item = cookieArr[i]
let arr = item.split('=') let separator = item.indexOf('=')
// 优化:使用严格等于 // 只按第一个等号拆分,保留 Cookie 值中的等号
if (arr.length === 2) { if (separator > 0) {
obj[arr[0].trim()] = arr[1].trim() obj[item.slice(0, separator).trim()] = item.slice(separator + 1).trim()
} }
} }
return obj return obj
}, },
hasCookie(cookie) {
if (typeof cookie === 'string') return cookie.length > 0
return (
cookie !== null &&
typeof cookie === 'object' &&
Object.keys(cookie).length > 0
)
},
getCookieHeader(headers) {
if (!headers || typeof headers !== 'object') return ''
if (typeof headers.get === 'function') {
const cookie = headers.get('cookie')
if (typeof cookie === 'string') return cookie
}
const headerName = Object.keys(headers).find(
(name) => name.toLowerCase() === 'cookie',
)
if (!headerName) return ''
const cookie = headers[headerName]
if (Array.isArray(cookie)) return cookie.join('; ')
return typeof cookie === 'string' ? cookie : ''
},
cookieObjToString(cookie) { cookieObjToString(cookie) {
// 优化:使用预绑定的keys函数和for循环 // 优化:使用预绑定的keys函数和for循环
const cookieKeys = keys(cookie) const cookieKeys = keys(cookie)
@@ -226,6 +253,8 @@ const cookieToJsonOptimized = (function() {
function getCookieValue(cookieStr, name) { function getCookieValue(cookieStr, name) {
if (!cookieStr) return '' if (!cookieStr) return ''
if (typeof cookieStr === 'object') return cookieStr[name] || ''
const cookies = '; ' + cookieStr const cookies = '; ' + cookieStr
const parts = cookies.split('; ' + name + '=') const parts = cookies.split('; ' + name + '=')
if (parts.length === 2) return parts.pop().split(';').shift() if (parts.length === 2) return parts.pop().split(';').shift()
+9 -1
View File
@@ -1,7 +1,15 @@
const { getCookieHeader, hasCookie } = require('./index')
const createOption = (query, crypto = '', checkToken = false) => { const createOption = (query, crypto = '', checkToken = false) => {
const headerCookie = getCookieHeader(query.headers)
return { return {
crypto: query.crypto || crypto || '', crypto: query.crypto || crypto || '',
cookie: query.cookie || process.env.NETEASE_COOKIE, cookie: hasCookie(query.cookie)
? query.cookie
: hasCookie(headerCookie)
? headerCookie
: process.env.NETEASE_COOKIE,
ua: query.ua || '', ua: query.ua || '',
proxy: query.proxy, proxy: query.proxy,
realIP: query.realIP, realIP: query.realIP,
+9 -1
View File
@@ -13,6 +13,8 @@ const tmpPath = require('os').tmpdir()
const { const {
cookieToJson, cookieToJson,
cookieObjToString, cookieObjToString,
getCookieHeader,
hasCookie,
toBoolean, toBoolean,
generateRandomChineseIP, generateRandomChineseIP,
} = require('./index') } = require('./index')
@@ -243,13 +245,19 @@ const createRequest = async (uri, data, options) => {
headers['X-Forwarded-For'] = ip headers['X-Forwarded-For'] = ip
} }
let cookie = options.cookie || {} let cookie = hasCookie(options.cookie)
? options.cookie
: getCookieHeader(options.headers)
if (!hasCookie(cookie)) cookie = {}
if (typeof cookie === 'string') { if (typeof cookie === 'string') {
cookie = cookieToJson(cookie) cookie = cookieToJson(cookie)
} }
if (typeof cookie === 'object') { if (typeof cookie === 'object') {
cookie = processCookieObject(cookie, crypto) cookie = processCookieObject(cookie, crypto)
Object.keys(headers).forEach((name) => {
if (name.toLowerCase() === 'cookie') delete headers[name]
})
headers['Cookie'] = cookieObjToString(cookie) headers['Cookie'] = cookieObjToString(cookie)
} }
let url = '' let url = ''