En interessant side av dette prosjektet er at det brukes til å digitalisere skannet text. Ett av ordene
du ser på bildet er et bilde som er skannet inn. Tanken er at dersom du, som menneske, greier
et av bildene, er det sannsynlig at du har et godt forslag også til det andre.
Ved å samle forslag prøver Captcha-prosjektet (Google) å finne svar på hva det egentlig står.
Det er altså bare ett av ordene som kontrolleres, men du vet ikke hvilket.
Noen ganger er det tydelig hvilket det er siden det andre bare er noen svarte flekker.
Testing reCaptcha
Du må laste ned et par koder, du kan sette opp websiden din på mange forskjellige måter, du må laste ned bilder med oppgaver og du må velge en eller annen måte å sjekke om brukeren har skrevet riktig kode.
Du får bare ett forsøk på hvert bilde.
.
Her er brukt Python på serversiden, Python Client for reCaptcha [3] .
Koden som er lastet ned, og litt modifisert ser slik ut
_capthca.py
import urllib2, urllib
API_SSL_SERVER="https://www.google.com/recaptcha/api"
API_SERVER="http://www.google.com/recaptcha/api"
VERIFY_SERVER="www.google.com"
"""
BS:
downloaded from: http://pypi.python.org/pypi/recaptcha-client
slightly modified see return from submit below
"""
class RecaptchaResponse(object):
def __init__(self, is_valid, error_code=None):
self.is_valid = is_valid
self.error_code = error_code
def displayhtml (public_key,
use_ssl = False,
error = None):
"""Gets the HTML to display for reCAPTCHA
public_key -- The public api key
use_ssl -- Should the request be sent over ssl?
error -- An error message to display (from RecaptchaResponse.error_code)"""
error_param = ''
if error:
error_param = '&error=%s' % error
if use_ssl:
server = API_SSL_SERVER
else:
server = API_SERVER
return """<script type="text/javascript" src="%(ApiServer)s/challenge?k=%(PublicKey)s%(ErrorParam)s"></script>
<noscript>
<iframe src="%(ApiServer)s/noscript?k=%(PublicKey)s%(ErrorParam)s" 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>
""" % {
'ApiServer' : server,
'PublicKey' : public_key,
'ErrorParam' : error_param,
}
def submit (recaptcha_challenge_field,
recaptcha_response_field,
private_key,
remoteip):
"""
Submits a reCAPTCHA request for verification. Returns RecaptchaResponse
for the request
recaptcha_challenge_field -- The value of recaptcha_challenge_field from the form
recaptcha_response_field -- The value of recaptcha_response_field from the form
private_key -- your reCAPTCHA private key
remoteip -- the user's ip address
"""
if not (recaptcha_response_field and recaptcha_challenge_field and
len (recaptcha_response_field) and len (recaptcha_challenge_field)):
return RecaptchaResponse (is_valid = False, error_code = 'incorrect-captcha-sol')
def encode_if_necessary(s):
if isinstance(s, unicode):
return s.encode('utf-8')
return s
params = urllib.urlencode ({
'privatekey': encode_if_necessary(private_key),
'remoteip' : encode_if_necessary(remoteip),
'challenge': encode_if_necessary(recaptcha_challenge_field),
'response' : encode_if_necessary(recaptcha_response_field),
})
request = urllib2.Request (
url = "http://%s/recaptcha/api/verify" % VERIFY_SERVER,
data = params,
headers = {
"Content-type": "application/x-www-form-urlencoded",
"User-agent": "reCAPTCHA Python"
}
)
httpresp = urllib2.urlopen (request)
return_values = httpresp.read ().splitlines ();
httpresp.close();
"""
BS: modified to simplify respons
"""
return return_values
"""
return_code = return_values [0]
if (return_code == "true"):
return RecaptchaResponse (is_valid=True)
else:
return RecaptchaResponse (is_valid=False, error_code = return_values [1])
"""
Scriptet som tar mot en AJAX-request, bruker koden over og returnerer godkjenning eller ikke er skrevet enkelt slik
_verifycapthca.py
#! /usr/bin/python
import cgi
import captcha
import cgitb; cgitb.enable()
"""
Using unit capthca.py downloaded from: http://pypi.python.org/pypi/recaptcha-client
Receive 2 values:
challenge, response
Accessed by AJAX
"""
"""
key obtained from Captcha site, matching: www.it.hiof.no
"""
myPrivateKey='<hemmelig>'
"""
Using http://www.selfseo.com/find_ip_address_of_a_website.php
with
www.it.hiof.no
giving:
"""
IPAddress='158.39.165.7'
form=cgi.FieldStorage()
print 'Content-type: text/plain; charset=utf-8\n\n'
challenge=''
response=''
try:
challenge=form['challenge'].value
response=form['response'].value
result= captcha.submit(challenge,response,myPrivateKey,IPAddress)
print result[0]+'\n'+result[1]
except:
print 'failed'