ReCAPTCHA siteverify接口未返回JSON响应问题求助
解决reCAPTCHA siteverify接口返回乱码及验证失败问题
问题根源
你的核心问题有两个:
- Google的
siteverify接口不支持JSON格式的请求体,它只接受application/x-www-form-urlencoded类型的表单数据 - 返回的乱码是因为接口返回了gzip压缩的响应,若axios未正确配置自动解压,就会显示乱码
修正后的代码
替换你原来的请求配置部分,改成以下代码:
// 用URLSearchParams构造表单数据,而非JSON.stringify const data = new URLSearchParams(); data.append('secret', process.env.RECAPTCHA_SECRET); data.append('response', req.body.gcaptcha_response); const config = { method: "post", url: "https://www.google.com/recaptcha/api/siteverify", // 强制开启gzip解压,确保响应能正常解析 headers: { 'Accept-Encoding': 'gzip, deflate' }, data: data, // 确保axios自动处理解压(部分环境下需要显式开启) decompress: true }; axios(config) .then(function (response) { res.json({ success: true, body: response.data, }); }) .catch(function (error) { console.log(error); });
关键说明
- 必须用
URLSearchParams构造请求数据,这是siteverify接口要求的标准格式,JSON格式会被接口忽略,导致返回异常响应 decompress: true是axios的配置项,确保自动解压gzip/deflate格式的响应,解决乱码问题- 不需要手动设置
Content-Type,当你传入URLSearchParams时,axios会自动设置为application/x-www-form-urlencoded;charset=utf-8,符合接口要求
内容的提问来源于stack exchange,提问作者MrArgon
相关产品推荐
相关产品推荐

