首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Python验证ReCaptcha响应服务器端?

如何用Python验证ReCaptcha响应服务器端?
EN

Stack Overflow用户
提问于 2017-09-24 17:58:29
回答 2查看 9.3K关注 0票数 6

我想在我的注册表单中检查使用react-google-recaptcha生成的客户端的响应。不幸的是,我不知道如何用Python验证它的服务器端。

我尝试了recaptcha-clienthttps://pypi.python.org/pypi/recaptcha-client,但是它似乎期待着一个直接使用同一个库生成的iframe的响应。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-24 19:07:27

它实际上非常简单,并且不需要任何库来执行此验证,以下是Google的文档:https://developers.google.com/recaptcha/docs/verify

我只需在地址中对参数进行编码,并向Google服务器发送请求,这是我的代码,请注意,我使用的是Flask,但是对于任何Python后端,原则都是一样的:

代码语言:javascript
复制
from urllib.parse import urlencode
from urllib.request import urlopen
import json


        URIReCaptcha = 'https://www.google.com/recaptcha/api/siteverify'
        recaptchaResponse = body.get('recaptchaResponse', None)
        private_recaptcha = '6LdXXXXXXXXXXXXXXXXXXXXXXXX'
        remote_ip = request.remote_addr
        params = urlencode({
            'secret': private_recaptcha,
            'response': recaptchaResponse,
            'remote_ip': remote_ip,
        })

        # print params
        data = urlopen(URIReCaptcha, params.encode('utf-8')).read()
        result = json.loads(data)
        success = result.get('success', None)

        if success == True:
            print 'reCaptcha passed'
        else:
            print 'recaptcha failed'
票数 8
EN

Stack Overflow用户

发布于 2020-08-20 13:03:41

在服务器端上使用python和烧瓶

代码语言:javascript
复制
from flask import request

     def verify_recaptcha(self, token):
        recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify'
        recaptcha_secret_key = 'SECRET-KEY'
        payload = {
           'secret': secret_key,
           'response': token,
           'remoteip': request.remote_addr,
        }
        response = requests.post(, data = payload)
        result = response.json()
        return result.get('success', False)

和客户端,使用React

安装正式的Google reCaptcha模块:

代码语言:javascript
复制
npm install react-google-recaptcha

然后,在保存表单的组件中:

代码语言:javascript
复制
import React, {Component} from "react";
import ReCAPTCHA from "react-google-recaptcha";

class formContainer extends Component {

    constructor(props) {
        super(props);
        this.recaptchaRef = React.createRef();
    }

    async apply() {
        const token = await this.recaptchaRef.current.executeAsync();
        let formData = new FormData();
        formData.append("token", token);
        //submit your form
    }

    render() {

       return (
          <div>
             <form>
                <input name="email"/>
                <button onClick={()=> { apply(); }}>
             </form>
             <ReCAPTCHA ref={this.recaptchaRef} size="invisible" sitekey={SITE_KEY}/>
          </div>
       )
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46393162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档