كيفية استخدام عميل reCaptcha الإضافي لـ Python للتحقق من الصحة؟

StackOverflow https://stackoverflow.com/questions/1440239

سؤال

أريد أن أقوم بالتحقق من صحة كلمة التحقق.

أحصل على المفتاح من موقع ريكابتشا ونجحت بالفعل في وضع المفتاح العام لتحميل صفحة الويب بالتحدي.

<script type="text/javascript"
   src="http://api.recaptcha.net/challenge?k=<your_public_key>">
</script>

<noscript>
   <iframe src="http://api.recaptcha.net/noscript?k=<your_public_key>"
       height="300" width="500" frameborder="0"></iframe><br>
   <textarea name="recaptcha_challenge_field" rows="3" cols="40">
   </textarea>
   <input type="hidden" name="recaptcha_response_field" 
       value="manual_challenge">
</noscript>

انا أحمل البرنامج المساعد reCaptcha بايثون لكن لا يمكنني العثور على أي وثائق حول كيفية استخدامه.

هل لدى أي شخص أي فكرة عن كيفية استخدام هذا البرنامج المساعد لبايثون؟recaptcha-client-1.0.4.tar.gz (md5)

هل كانت مفيدة؟

المحلول

ومن اليسير جدا. وهذا مثال من البرنامج المساعد تراك تافهة أنا باستخدام:

from recaptcha.client import captcha

if req.method == 'POST':
    response = captcha.submit(
        req.args['recaptcha_challenge_field'],
        req.args['recaptcha_response_field'],
        self.private_key,
        req.remote_addr,
        )
    if not response.is_valid:
        say_captcha_is_invalid()
    else:
        do_something_useful()
else:
    data['recaptcha_javascript'] = captcha.displayhtml(self.public_key)
    data['recaptcha_theme'] = self.theme
    return 'recaptchaticket.html', data, n

نصائح أخرى

يؤسفني أن أقول ذلك، ولكن هذه الوحدة، على الرغم من أنها تعمل بشكل جيد، إلا أنها غير موثقة بالكامل تقريبًا، وتخطيطها مربك بعض الشيء بالنسبة لأولئك منا الذين يفضلون استخدام ">> help(modulename)" بعد التثبيت.سأعطي مثالا باستخدام Cherrypy، وأدلي ببعض التعليقات المتعلقة بـ CGI بعد ذلك.

يحتوي captcha.py على وظيفتين وفئة:

  • Display_html:الذي يُرجع "مربع reCaptcha" المألوف

  • يُقدِّم:الذي يقدم القيم التي أدخلها المستخدم في الخلفية

  • رد كابتشا:وهي فئة حاوية تحتوي على الاستجابة من reCaptcha

ستحتاج أولاً إلى استيراد المسار الكامل إلى capcha.py، ثم إنشاء وظيفتين تتعاملان مع عرض الاستجابة والتعامل معها.

from recaptcha.client import captcha
class Main(object):

    @cherrypy.expose
    def display_recaptcha(self, *args, **kwargs):
        public = "public_key_string_you_got_from_recaptcha"
        captcha_html = captcha.displayhtml(
                           public,
                           use_ssl=False,
                           error="Something broke!")

        # You'll probably want to add error message handling here if you 
        # have been redirected from a failed attempt
        return """
        <form action="validate">
        %s
        <input type=submit value="Submit Captcha Text" \>
        </form>
        """%captcha_html

    # send the recaptcha fields for validation
    @cherrypy.expose
    def validate(self, *args, **kwargs):
        # these should be here, in the real world, you'd display a nice error
        # then redirect the user to something useful

        if not "recaptcha_challenge_field" in kwargs:
            return "no recaptcha_challenge_field"

        if not "recaptcha_response_field" in kwargs:
            return "no recaptcha_response_field"

        recaptcha_challenge_field  = kwargs["recaptcha_challenge_field"]
        recaptcha_response_field  = kwargs["recaptcha_response_field"]

        # response is just the RecaptchaResponse container class. You'll need 
        # to check is_valid and error_code
        response = captcha.submit(
            recaptcha_challenge_field,
            recaptcha_response_field,
            "private_key_string_you_got_from_recaptcha",
            cherrypy.request.headers["Remote-Addr"],)

        if response.is_valid:
            #redirect to where ever we want to go on success
            raise cherrypy.HTTPRedirect("success_page")

        if response.error_code:
            # this tacks on the error to the redirect, so you can let the
            # user knowwhy their submission failed (not handled above,
            # but you are smart :-) )
            raise cherrypy.HTTPRedirect(
                "display_recaptcha?error=%s"%response.error_code)

سيكون الأمر مشابهًا إلى حد كبير في حالة استخدام cgi، فقط استخدم متغير البيئة REMOTE_ADDR حيث استخدمت request.headers الخاص بـ Cherrypy واستخدم التخزين الميداني لإجراء عمليات التحقق.

ليس هناك سحر، الوحدة تتبع المستندات فقط:https://developers.google.com/recaptcha/docs/display

أخطاء التحقق من الصحة التي قد تحتاج إلى معالجتها:https://developers.google.com/recaptcha/docs/verify

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top