【发布时间】:2018-01-02 14:48:58
【问题描述】:
我之前将 reCAPTCHA V1 与来自 Matt 的 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”错误。
提前感谢您抽出宝贵时间阅读我的问题,感谢社区提供的任何帮助。
非常感谢!
【问题讨论】:
-
您在认真使用 2018 年 Matt's Script Archive 的表单邮件吗?
-
你打印出回复内容了吗?请求是否成功?你能在你的服务器上安装额外的模块来加载调试工具吗?看看您的脚本与 Google 之间的通信会很有趣。
-
@simbabque 我在这方面非常缺乏经验,Matt 的脚本档案中的 FormMail 是我当时能找到的最佳解决方案。您能否建议一些更适合驱动简单网站联系表的内容?
-
这真的取决于你有什么样的托管孩子。如果它真的只是一个联系表格,我想 CGI 不是问题。但该代码是OLD。而且您可能没有使用它的所有功能(如果有的话)。 This talk 解释了为什么 CGI 不是当今的最佳选择。但是,如果您使用的是共享主机,则没有很多选择。不过,即使使用 CGI(或在 CGI 上设置 Plack),您也可以编写相对干净、现代的代码。将几个模块、几行代码组合在一起,它会比那些旧东西更好。
-
@simbabque 感谢您提供的信息,感谢您的宝贵时间。我确实在共享主机上,无法在 Web 服务器上安装其他模块。看完你链接的视频后,我不鼓励使用 CGI,但担心我没有选择,因为我的主机。不过,感谢您的建议。
标签: perl cgi recaptcha formmail