You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

服务器端验证Google reCAPTCHA v2时返回乱码问题排查

解决Google reCAPTCHA v2验证API返回乱码的问题

你遇到的问题根源在于请求格式不符合Google reCAPTCHA验证API的要求——siteverify接口并不支持JSON格式的请求体,它只接受**表单编码(application/x-www-form-urlencoded)**的参数传递,这就是为什么你用Axios发JSON请求会返回乱码,而浏览器直接访问(默认GET请求,参数拼接在URL里)能得到正常响应。

你的代码里有两个核心问题:

  • 请求头错误设置了"Content-Type": "application/json",不符合API的参数解析规则
  • 用JSON对象传递payload,API无法正确解析这些参数

这里给你调整后的可行代码:

// 用URLSearchParams生成表单编码的参数
const payload = new URLSearchParams({
  secret: process.env.NEXT_PUBLIC_RECAPTCHA_SECRET_KEY ?? "",
  response: reCaptchaValue,
  // remoteip是可选参数,不需要的话直接省略即可,不用传undefined
});

const verifyResponse = await axios({
  method: "POST",
  url: "https://www.google.com/recaptcha/api/siteverify",
  data: payload,
  // Axios会自动识别URLSearchParams类型,自动设置正确的Content-Type,无需手动指定
});

如果你不想使用URLSearchParams,也可以手动拼接表单字符串:

// 手动编码参数并拼接成表单格式
const payload = `secret=${encodeURIComponent(process.env.NEXT_PUBLIC_RECAPTCHA_SECRET_KEY ?? "")}&response=${encodeURIComponent(reCaptchaValue)}`;

const verifyResponse = await axios({
  method: "POST",
  url: "https://www.google.com/recaptcha/api/siteverify",
  data: payload,
  headers: {
    "Content-Type": "application/x-www-form-urlencoded",
  },
});

内容的提问来源于stack exchange,提问作者Deepesh Rijal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 10:25:46