Node.js中Discord服务器加入请求的2captcha令牌配置问题
解决Discord加入服务器API的hCaptcha令牌传递问题
要通过2Captcha解决Discord的hCaptcha校验并成功调用加入服务器API,你需要将2Captcha返回的验证令牌放在POST请求的data参数中,字段名为captcha_key,具体步骤如下:
1. 用2Captcha获取hCaptcha验证令牌
首先调用2Captcha的API提交hCaptcha任务,需要用到Discord返回的captcha_sitekey(即4c672d35-0701-42b2-88c3-78380b0db560)和Discord的域名https://discord.com。示例代码:
// 替换为你的2Captcha API密钥 const CAPTCHA_API_KEY = "你的2Captcha密钥"; const sitekey = "4c672d35-0701-42b2-88c3-78380b0db560"; const pageurl = "https://discord.com"; async function getCaptchaToken() { // 提交hCaptcha任务 const submitResponse = await axios.post(`https://2captcha.com/in.php?key=${CAPTCHA_API_KEY}&method=hcaptcha&sitekey=${sitekey}&pageurl=${pageurl}`); if (!submitResponse.data.startsWith("OK|")) { throw new Error("提交验证码任务失败: " + submitResponse.data); } const taskId = submitResponse.data.split("|")[1]; // 轮询获取验证结果 while (true) { await new Promise(resolve => setTimeout(resolve, 2000)); const resultResponse = await axios.get(`https://2captcha.com/res.php?key=${CAPTCHA_API_KEY}&action=get&id=${taskId}`); if (resultResponse.data.startsWith("OK|")) { return resultResponse.data.split("|")[1]; } else if (resultResponse.data === "CAPCHA_NOT_READY") { continue; } else { throw new Error("获取验证码结果失败: " + resultResponse.data); } } }
2. 将令牌传入Discord的POST请求中
拿到2Captcha返回的令牌后,把它添加到请求的data对象里,字段名为captcha_key,同时调整请求参数确保适配API要求:
async function joinServer(inviteCode, authToken) { try { const captchaToken = await getCaptchaToken(); const response = await axios.request({ method: 'post', url: `https://discord.com/api/v9/invites/${inviteCode}`, headers: { 'Authorization': authToken, 'accept': 'application/json', // 改为接受JSON格式,更适配API请求 'accept-language': 'pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7', 'referer': 'https://discord.com/', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36' }, data: { captcha_key: captchaToken // 若需其他参数(如跳过验证选项),可参考Discord API文档添加 } }); console.log("成功加入服务器:", response.data); return response.data; } catch (error) { console.error("加入失败:", error.response?.data || error.message); throw error; } } // 调用示例 joinServer("你的邀请码", "你的Discord令牌");
关键注意事项
- 字段名必须准确:Discord API指定用
captcha_key字段传递验证码令牌,不可使用其他名称。 - 端点域名修正:使用
discord.com而非discordapp.com,避免不必要的重定向问题。 - Headers精简:移除浏览器导航类Headers(如
sec-fetch-*、upgrade-insecure-requests),仅保留API请求必需的核心Headers。 - 2Captcha参数匹配:提交任务时的
sitekey和pageurl必须与Discord返回的完全一致,否则无法生成有效验证令牌。
内容的提问来源于stack exchange,提问作者octopi
相关产品推荐
相关产品推荐

