Auto POST Request to Vote API

发送 POST 请求至 https://api.app.workercn.cn/vote/voteClick

Ekde 2025/01/07. Vidu La ĝisdata versio.

// ==UserScript==
// @name         Auto POST Request to Vote API
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  发送 POST 请求至 https://api.app.workercn.cn/vote/voteClick
// @author       You
// @match        https://web.app.workercn.cn/*
// @grant        none
// @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 的计算
    return str.split('').reduce(function(a, b) {
        return a + b.charCodeAt(0);
    }, 0).toString(16); // 这只是一个简单的字符串散列方法
}
     
})();