发送 POST 请求至 https://api.app.workercn.cn/vote/voteClick
当前为
// ==UserScript==
// @name Auto POST Request to Vote API
// @namespace http://tampermonkey.net/
// @version 0.1
// @description 发送 POST 请求至 https://api.app.workercn.cn/vote/voteClick
// @author You
// @match https://web.app.workercn.cn/*
// @grant none
// @require https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1-crypto-js.js
// @license MIT
// ==/UserScript==
(function() {
'use strict';
// 参数准备
const params = {
voteID: 106,
optionID: 5530,
deviceID: "fbb8ca48-18fa-9e90-8b48-c1dd72f40859",
deviceSign: "",
userID: "",
userIDSign: "",
sign: "",
token: ""
};
// 排序参数
const sortedParams = Object.keys(params)
.filter(key => params[key] !== undefined) // 过滤掉值为 undefined 或空值的参数
.sort() // 按参数名升序排序
.map(key => `${key}=${params[key]}`) // 拼接 key=value 的格式
.join("&"); // 使用 & 连接
// 计算 sign (使用 MD5 加密)
params.sign = md5(sortedParams); // 需要先加载 MD5 加密库
// 构造 POST 请求体
const requestBody = JSON.stringify(params);
// 请求头
const headers = {
'Accept': 'application/json, text/plain, */*',
'Accept-Encoding': 'gzip, deflate, br, zstd',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Length': String(requestBody.length),
'Content-Type': 'application/json;charset=UTF-8',
'Host': 'api.app.workercn.cn',
'Origin': 'https://web.app.workercn.cn',
'Referer': 'https://web.app.workercn.cn/',
'Sec-CH-UA': '"Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
'Sec-CH-UA-Mobile': '?0',
'Sec-CH-UA-Platform': '"Windows"',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-site',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
};
// 发送 POST 请求
fetch('https://api.app.workercn.cn/vote/voteClick', {
method: 'POST',
headers: headers,
body: requestBody
})
.then(response => response.json())
.then(data => {
console.log('Response:', data); // 处理服务器响应
})
.catch(error => {
console.error('Error:', error); // 错误处理
});
// MD5 加密方法(简单实现,实际中可以引入库)
function md5(str) {
// 假设我们在插件中引入了 MD5 加密库 (比如 CryptoJS)
return CryptoJS.MD5(str).toString(CryptoJS.enc.Hex); // 使用 CryptoJS 库进行 MD5 加密
}
})();