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

reCAPTCHA服务端集成疑问:如何向验证接口发送POST请求?

如何完成reCAPTCHA服务端验证POST请求

别担心,我来一步步帮你搞定服务端的reCAPTCHA验证请求。核心逻辑其实很清晰,就是把必要参数打包成POST请求发送到Google的验证接口,然后解析返回结果判断是否通过。下面我会用几种常用后端语言给你写示例,你可以直接套用自己在用的技术栈:

通用验证逻辑

不管用什么语言,核心步骤都是这几步:

  1. 从用户提交的表单里获取g-recaptcha-response字段的值(这个是客户端reCAPTCHA生成的验证令牌)
  2. 准备三个参数:
    • secret:你的reCAPTCHA服务端密钥(必须保密,绝对不能写在前端代码里)
    • response:刚才获取的g-recaptcha-response值
    • remoteip:可选,终端用户的IP地址,加上能提升验证准确性
  3. 向https://www.google.com/recaptcha/api/siteverify发送POST请求
  4. 解析返回的JSON结果,检查success字段是否为true,以此判断验证是否通过

具体语言示例

PHP示例(用cURL实现)

<?php
// 从POST表单中获取reCAPTCHA响应令牌
$recaptchaResponse = $_POST['g-recaptcha-response'] ?? '';
// 替换成你自己的服务端secret密钥
$secretKey = '你的实际secret密钥';
// 获取用户IP地址
$userIp = $_SERVER['REMOTE_ADDR'];

// 构造POST请求的参数
$postData = http_build_query([
    'secret' => $secretKey,
    'response' => $recaptchaResponse,
    'remoteip' => $userIp
]);

// 初始化cURL会话
$ch = curl_init('https://www.google.com/recaptcha/api/siteverify');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 执行请求并获取响应
$response = curl_exec($ch);
curl_close($ch);

// 解析JSON格式的响应
$result = json_decode($response, true);

// 根据结果判断验证是否通过
if ($result['success']) {
    // 验证通过,这里写你的表单处理逻辑(比如保存数据、发送邮件等)
    echo "reCAPTCHA验证通过!表单已提交";
} else {
    // 验证失败,可打印错误码排查问题
    echo "reCAPTCHA验证失败,请重试!";
    echo "<br>错误信息:";
    print_r($result['error-codes']);
}
?>

Python示例(用Requests库,Flask框架为例)

import requests
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/submit-form', methods=['POST'])
def submit_form():
    # 获取前端传来的reCAPTCHA响应
    recaptcha_response = request.form.get('g-recaptcha-response', '')
    # 替换成你的服务端secret密钥
    secret_key = '你的实际secret密钥'
    # 获取用户IP
    user_ip = request.remote_addr

    # 发送POST请求到验证接口
    verify_response = requests.post(
        'https://www.google.com/recaptcha/api/siteverify',
        data={
            'secret': secret_key,
            'response': recaptcha_response,
            'remoteip': user_ip
        }
    )

    # 解析返回结果
    result = verify_response.json()

    if result['success']:
        # 验证通过,处理表单逻辑
        return jsonify({'status': 'success', 'message': '表单提交成功'})
    else:
        # 验证失败,返回错误信息
        error_codes = result.get('error-codes', [])
        return jsonify({'status': 'failed', 'message': 'reCAPTCHA验证失败', 'errors': error_codes}), 400

if __name__ == '__main__':
    app.run(debug=True)

Node.js示例(用Axios库,Express框架为例)

const express = require('express');
const axios = require('axios');
const app = express();

// 解析表单数据
app.use(express.urlencoded({ extended: true }));

app.post('/submit-form', async (req, res) => {
    try {
        // 获取reCAPTCHA响应令牌
        const recaptchaResponse = req.body['g-recaptcha-response'];
        // 替换成你的服务端secret密钥
        const secretKey = '你的实际secret密钥';
        // 获取用户IP
        const userIp = req.ip;

        // 发送验证请求
        const verifyResult = await axios.post(
            'https://www.google.com/recaptcha/api/siteverify',
            null,
            {
                params: {
                    secret: secretKey,
                    response: recaptchaResponse,
                    remoteip: userIp
                }
            }
        );

        if (verifyResult.data.success) {
            // 验证通过,处理表单
            res.send('表单提交成功,reCAPTCHA验证通过');
        } else {
            // 验证失败,返回错误
            const errors = verifyResult.data['error-codes'] || [];
            res.status(400).send(`reCAPTCHA验证失败:${errors.join(', ')}`);
        }
    } catch (err) {
        console.error('验证请求出错:', err);
        res.status(500).send('服务器内部错误');
    }
});

app.listen(3000, () => {
    console.log('服务器运行在 http://localhost:3000');
});

重要注意事项

  • 绝对不要泄露你的secret密钥:这个密钥只能在服务端使用,一旦暴露,恶意攻击者可以绕过reCAPTCHA验证
  • remoteip参数虽然可选,但建议加上,它能帮助Google区分正常请求和恶意请求,提升验证准确率
  • 如果验证失败,可以查看返回的error-codes字段,对应官方文档的错误码就能快速排查问题(比如密钥不匹配、响应令牌过期等)
  • 确保你的服务端可以访问Google的验证接口,如果是国内服务器,可能需要配置代理才能正常请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:26:37