كيفية استخدام عميل reCaptcha الإضافي لـ Python للتحقق من الصحة؟
-
10-07-2019 - |
سؤال
أريد أن أقوم بالتحقق من صحة كلمة التحقق.
أحصل على المفتاح من موقع ريكابتشا ونجحت بالفعل في وضع المفتاح العام لتحميل صفحة الويب بالتحدي.
<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