Какие-нибудь примеры обработки ответа POST на recaptcha?
Текущая версия V2 reCaptcha возвращает "POST" в CGI:params. Не совсем то, что делала старая версия V2.
Положительным моментом является то, что любое содержимое HTML-формы и ответ reCaptcha поступают одновременно. Недостатком является то, что значение "g-recaptcha-response" является BLOB-объектом, который требует локальной проверки.
Значение "g-recaptcha-response" выглядит примерно так:
03AJzQf7OU1j33-wm7I73BItJg-l2COD-YwSjesvfej_5vy5c0r_LUhaDU1KsvU0BV0Rc-MHRbR4L17TNya1CqFtCJGulzvwTpKCfjwWcwqj2e3nFiqeropkXnYzwE78Eydr0jGi3OjZCKK71rmhOXZr0OA_nC8Cpd6aPaexqkrfLXdiXFPE7pQqc-qixYzVklb2MIuPyxw414kVbyHsbDr5p-pitK9cXvvPYK1Td7T_z6xnMUIuNN5zY3ArYzlAGexsSffucQRrzSKT_779In1QzwQppASux3-Z_xPLQgCLnRsJlwcby7gFFWXHSfAxV2ErpsiGWQcGa1
Как можно расшифровать этот ответ в Perl, чтобы убедиться, что это подлинное подтверждение того, что тест Тьюринга был решен правильно?
1 ответ
Знаете ли вы модуль Captcha:: reCAPTCHA:: V2? Я успешно использовал его, и это экономит время. В простом CGI код на стороне сервера, который выполняет проверку, будет выглядеть так:
my $rc = Captcha::reCAPTCHA::V2->new;
my $result = $rc->verify('<your secret key here>', param('g-recaptcha-response'), remote_host);
# Check the result
if( !$result->{success} ){
# The check failed, ignore the POST
next;
}
Я предполагаю, что вы уже создали свои ключи reCAPTCHA, у вас есть HTML-форма и представление о том, как создать остальную часть кода на стороне сервера.
Чтобы помочь другим людям, которые могут искать, как это сделать, это минимальная форма для клиентской стороны (она основана на начальной загрузке):
<form id="contact-form" method="post" action="contact">
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="message">Comments</label>
<textarea id="message" type="text" name="message" class="form-control" placeholder="Your comments..." rows="4" required></textarea>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div align="center">
<button
class="g-recaptcha"
data-sitekey="<your site key here>"
data-callback="onSubmit">
Enviar mensaje
</button>
</div>
</div>
</div>
</form>
<script>
function onSubmit(token) {
document.getElementById("contact-form").submit();
}
</script>
Затем на стороне сервера вам понадобится что-то вроде этого (это основано на FastCGI; для CGI вы бы не использовали цикл):
use CGI::Fast qw(:standard);
use Captcha::reCAPTCHA::V2;
...
while(my $query = new CGI::Fast) {
...
if( request_method eq 'POST' ) {
my $rc = Captcha::reCAPTCHA::V2->new;
my $result = $rc->verify('<your secret key here>', param('g-recaptcha-response'), remote_host);
# Check the result
if( !$result->{success} ){
# The check failed, ignore the POST
next;
}
# Do something with the form
}
...
}