Comment utiliser le client du plugin Python reCaptcha pour la validation?
-
10-07-2019 - |
Question
Je souhaite effectuer une validation captcha.
J'obtiens la clé du site Web recaptcha et j'ai déjà réussi à mettre la clé publique pour charger la page Web avec le défi .
<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>
Je télécharge le plug-in reCaptcha Python , mais je ne trouve aucune documentation sur la procédure à suivre. utilise le.
Quelqu'un at-il une idée sur la façon d'utiliser ce plugin Python? recaptcha-client-1.0.4.tar.gz (md5)
La solution
C'est assez simple. Voici un exemple tiré d'un plugin trivial que j'utilise:
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
Autres conseils
Désolé de le dire, mais ce module fonctionne, mais il est presque totalement non documenté et sa présentation est un peu déroutante pour ceux d'entre nous qui préfèrent utiliser " > > aide (nom du module) " après l'installation. Je vais donner un exemple en utilisant cherrypy, puis quelques commentaires sur cgi.
captcha.py contient deux fonctions et une classe:
-
display_html: qui retourne la célèbre "reCaptcha box"
-
submit: qui soumet les valeurs saisies par l'utilisateur en arrière-plan
-
RecapchaResponse: qui est une classe de conteneur contenant la réponse de reCaptcha
Vous devez d'abord importer le chemin complet dans capcha.py, puis créer quelques fonctions qui gèrent l'affichage et le traitement de la réponse.
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)
Ce sera à peu près pareil si vous utilisez cgi, utilisez simplement la variable d’environnement REMOTE_ADDR où j’ai utilisé request.headers de cherrypy et j’utilise le stockage de champ pour effectuer vos vérifications.
Il n’ya pas de magie, le module ne fait que suivre la documentation: https://developers.google.com/recaptcha/docs/display
Erreurs de validation que vous devrez peut-être gérer: https://developers.google.com/recaptcha/docs/verify