2009-09-17 15 views
15

Chcę dokonać sprawdzania poprawności captcha.Jak korzystać z klienta reCaptcha w Pythonie do sprawdzania poprawności?

Otrzymuję klucz od recaptcha website i już udało się umieścić klucz publiczny, aby załadować stronę z wyzwaniem.

<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> 

Pobieram the reCaptcha Python plugin, ale nie mogę znaleźć dokumentacji, jak z niego korzystać.

Czy ktoś ma jakiś pomysł na temat korzystania z tej wtyczki Python? recaptcha-client-1.0.4.tar.gz (md5)

Odpowiedz

25

Jest to dość proste. To jest przykład z trywialny trac plugin Używam:

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 
+0

Hi opat, Jestem nowy w Pythonie, można wyjaśnić w jaki sposób skorzystać z pobranego pakietu w więcej szczegółów? –

+2

Powinieneś zainstalować go jako zwykły pakiet Pythona. Polecam lekturę kursu wprowadzającego na temat Pythona, jeśli nie znasz wszystkich tych rzeczy. Możesz spróbować http://diveintopython.org/toc/index.html lub http://docs.python.org/tutorial/index.html jako dobrego punktu wyjścia. – abbot

4

Przykro powiedzieć, ale tego modułu, a to działa dobrze, jest prawie całkowicie nieudokumentowane, a to układ jest odrobinę mylące dla tych, z nas, którzy wolą używać ">> help (modulename)" po instalacji. Podam przykład używając cherrypy i później poczynię kilka komentarzy związanych z cgi.

captcha.py zawiera dwie funkcje i klasę:

  • display_html: która zwraca znajomy „Odśwież pole”

  • złożyć: który podnosi wartości wpisane przez użytkownika w tle

  • RecapchaResponse: która jest klasą kontenera zawierającą odpowiedź z reCaptcha

Najpierw należy zaimportować pełną ścieżkę do pliku capcha.py, a następnie utworzyć kilka funkcji służących do wyświetlania i obsługi odpowiedzi.

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) 

To będzie prawie taka sama w przypadku korzystania z CGI, wystarczy użyć zmiennej środowiskowej REMOTE_ADDR gdzie użyłem request.headers przechowywanie i wykorzystanie pola CherryPy, aby zrobić swoje kontrole.

Nie ma magii, moduł właśnie następuje docs: https://developers.google.com/recaptcha/docs/display

błędy sprawdzania poprawności może trzeba obsłużyć: https://developers.google.com/recaptcha/docs/verify

Powiązane problemy