Files
2026-02-04 20:02:00 +08:00

78 lines
2.8 KiB
JavaScript

// 生成随机请求头,用于绕过防盗链检测
export function getRandomHeaders(imageUrl) {
// 随机浏览器版本
const chromeVersions = ['120.0.0.0', '121.0.0.0', '122.0.0.0', '123.0.0.0', '119.0.0.0']
const edgeVersions = ['120.0.0.0', '121.0.0.0', '122.0.0.0', '119.0.0.0']
const firefoxVersions = ['121.0', '122.0', '123.0', '120.0', '119.0']
// 随机操作系统
const platforms = [
{ os: 'Windows NT 10.0; Win64; x64', platform: 'Windows' },
{ os: 'Windows NT 11.0; Win64; x64', platform: 'Windows' },
{ os: 'Macintosh; Intel Mac OS X 10_15_7', platform: 'macOS' },
{ os: 'Macintosh; Intel Mac OS X 13_0_0', platform: 'macOS' },
{ os: 'X11; Linux x86_64', platform: 'Linux' }
]
// 随机语言
const languages = [
'zh-CN,zh;q=0.9,en;q=0.8',
'en-US,en;q=0.9',
'zh-TW,zh;q=0.9,en;q=0.8',
'ja-JP,ja;q=0.9,en;q=0.8',
'en-GB,en;q=0.9'
]
// 随机选择
const randomChoice = (arr) => arr[Math.floor(Math.random() * arr.length)]
const platform = randomChoice(platforms)
const language = randomChoice(languages)
// 随机选择浏览器类型
const browserType = Math.random()
let userAgent, secChUa
if (browserType < 0.6) {
// Chrome
const version = randomChoice(chromeVersions)
const majorVersion = version.split('.')[0]
userAgent = `Mozilla/5.0 (${platform.os}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${version} Safari/537.36`
secChUa = `"Not_A Brand";v="8", "Chromium";v="${majorVersion}", "Google Chrome";v="${majorVersion}"`
} else if (browserType < 0.85) {
// Edge
const version = randomChoice(edgeVersions)
const majorVersion = version.split('.')[0]
userAgent = `Mozilla/5.0 (${platform.os}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${version} Safari/537.36 Edg/${version}`
secChUa = `"Not_A Brand";v="8", "Chromium";v="${majorVersion}", "Microsoft Edge";v="${majorVersion}"`
} else {
// Firefox
const version = randomChoice(firefoxVersions)
userAgent = `Mozilla/5.0 (${platform.os}; rv:${version}) Gecko/20100101 Firefox/${version}`
secChUa = null // Firefox 不使用 Sec-Ch-Ua
}
const headers = {
'User-Agent': userAgent,
'Accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
'Accept-Language': language,
'Accept-Encoding': 'gzip, deflate, br',
'Cache-Control': 'no-cache',
'Pragma': 'no-cache',
'Sec-Fetch-Dest': 'image',
'Sec-Fetch-Mode': 'no-cors',
'Sec-Fetch-Site': 'cross-site',
// 使用图片URL的origin作为Referer,绕过防盗链
'Referer': imageUrl.origin + '/',
'Origin': imageUrl.origin
}
// 只有非 Firefox 浏览器才添加 Sec-Ch-Ua 头
if (secChUa) {
headers['Sec-Ch-Ua'] = secChUa
headers['Sec-Ch-Ua-Mobile'] = '?0'
headers['Sec-Ch-Ua-Platform'] = `"${platform.platform}"`
}
return headers
}