带有 FormMail.cgi 的 reCAPTCHA V2(马特的脚本存档)
reCAPTCHA V2 with FormMail.cgi (Matt's Script Archive)
我之前将 reCAPTCHA V1 与 Matt's Script Archive 中的 FormMail.cgi 结合使用,使用以下 Perl 函数来验证 reCAPTCHA 响应:
sub check_captcha {
my $ua = LWP::UserAgent->new();
my $result=$ua->post(
'http://www.google.com/recaptcha/api/verify',
{
privatekey => 'MyPrivateKey',
remoteip => $ENV{'REMOTE_ADDR'},
challenge => $Form{'recaptcha_challenge_field'},
response => $Form{'recaptcha_response_field'}
}
);
if ( $result->is_success && $result->content =~ /^true/) {
return;
} else {
&error('captcha_failed');
}
}
reCAPTCHA V1 将于 2018 年 3 月底关闭,因此我需要转到 reCAPTCHA V2,但是,我在验证 CGI 脚本中的响应时遇到问题。
基于 server side documentation,这是我目前尝试过的方法(没有成功):
sub check_captcha {
my $ua = LWP::UserAgent->new();
my $result=$ua->post(
'https://www.google.com/recaptcha/api/siteverify',
{
secret => 'MyPrivateKey',
remoteip => $ENV{'REMOTE_ADDR'},
response => $Form{'g-recaptcha-response'}
}
);
if ( $result->is_success && $result->content =~ /"success": true/ ) {
return;
} else {
&error('captcha_failed');
}
}
以上总是分支到 'captcha_failed' 错误。
提前感谢您花时间阅读我的问题,感谢社区提供的任何帮助。
非常感谢!
我看不出您的代码有任何明显的问题。但我想知道为什么当 Google::reCAPTCHA 存在时你要自己实现它。
use Google::reCAPTCHA;
my $c = Google::reCAPTCHA->new( secret => 'MyPrivateKey' );
# Verifying the user's response
my $success = $c->siteverify(
response => $Form{'g-recaptcha-response'},
remoteip => $ENV{'REMOTE_ADDR'},
);
if ( $success ) {
# CAPTCHA was valid
}
并且为什么您使用的代码来自 Matt 的脚本存档?
我之前将 reCAPTCHA V1 与 Matt's Script Archive 中的 FormMail.cgi 结合使用,使用以下 Perl 函数来验证 reCAPTCHA 响应:
sub check_captcha {
my $ua = LWP::UserAgent->new();
my $result=$ua->post(
'http://www.google.com/recaptcha/api/verify',
{
privatekey => 'MyPrivateKey',
remoteip => $ENV{'REMOTE_ADDR'},
challenge => $Form{'recaptcha_challenge_field'},
response => $Form{'recaptcha_response_field'}
}
);
if ( $result->is_success && $result->content =~ /^true/) {
return;
} else {
&error('captcha_failed');
}
}
reCAPTCHA V1 将于 2018 年 3 月底关闭,因此我需要转到 reCAPTCHA V2,但是,我在验证 CGI 脚本中的响应时遇到问题。
基于 server side documentation,这是我目前尝试过的方法(没有成功):
sub check_captcha {
my $ua = LWP::UserAgent->new();
my $result=$ua->post(
'https://www.google.com/recaptcha/api/siteverify',
{
secret => 'MyPrivateKey',
remoteip => $ENV{'REMOTE_ADDR'},
response => $Form{'g-recaptcha-response'}
}
);
if ( $result->is_success && $result->content =~ /"success": true/ ) {
return;
} else {
&error('captcha_failed');
}
}
以上总是分支到 'captcha_failed' 错误。
提前感谢您花时间阅读我的问题,感谢社区提供的任何帮助。
非常感谢!
我看不出您的代码有任何明显的问题。但我想知道为什么当 Google::reCAPTCHA 存在时你要自己实现它。
use Google::reCAPTCHA;
my $c = Google::reCAPTCHA->new( secret => 'MyPrivateKey' );
# Verifying the user's response
my $success = $c->siteverify(
response => $Form{'g-recaptcha-response'},
remoteip => $ENV{'REMOTE_ADDR'},
);
if ( $success ) {
# CAPTCHA was valid
}
并且为什么您使用的代码来自 Matt 的脚本存档?