如何解决全局使用reCAPTCHA
我正在按照https://developers.google.com/recaptcha/docs/faq#can-i-use-recaptcha-globally上的说明尝试全局使用reCAPTCHA。但是,它对我不起作用。
我将所有出现的“ https://www.google.com/recaptcha”替换为“ https://www.recaptcha.net/recaptcha”,但我注意到它仍然在内部指的是google.com
https://www.recaptcha.net/recaptcha/api.js正在呼叫https://www.gstatic.com/recaptcha/releases/TPiWapjoyMdQOtxLT9_b4n2W/recaptcha__en.js,并且在内部是指google.com托管人。
好像ReCaptcha的代码对我来说很糟糕。有什么想法吗?
解决方法
正如一些评论所述,google系统选择了最佳URL,您不能强迫它从recaptcha.net获取。如this post from recaptcha's support group
所述,尝试覆盖您的链接可能会随时断开链接 ,使用 recaptcha.net 解决此问题不将解决该问题,因为它会再次调用 google.com 。>
所以这里我有一个解决方案。该解决方案使用 cURL 。当您从cURL发出请求时,它实际上并不是来自客户端,而是作为用户和服务器之间的代理。
在PHP语言中,您可以通过以下方式做到这一点:
reCaptcha.php
<?php
if (! function_exists ( 'curl_version' )) {
exit ( "Enable cURL in PHP" );
}
$ch = curl_init ();
$timeout = 0; // 100; // set to zero for no timeout
$myHITurl = "https://www.google.com/recaptcha"; //domain which is blocked
curl_setopt ( $ch,CURLOPT_URL,$myHITurl );
curl_setopt ( $ch,CURLOPT_HEADER,0 );
curl_setopt ( $ch,CURLOPT_RETURNTRANSFER,1 );
curl_setopt ( $ch,CURLOPT_CONNECTTIMEOUT,$timeout );
curl_setopt($ch,CURLOPT_POSTFIELDS,"text=/");
$file_contents = curl_exec ( $ch );
if (curl_errno ( $ch )) {
echo curl_error ( $ch );
curl_close ( $ch );
exit ();
}
curl_close ( $ch );
// dump output of api if you want during test
echo "$file_contents";
?>
因此,您可以请求此 reCaptcha.php 文件,并将此reCaptcha.php页面的输出用作响应。
如果您不使用PHP,则可以使用自己项目的编程语言来完成。您可能还需要根据需要进行一些修改,但是只需要使用cURL,过程将保持不变。
但这实现起来非常复杂。因此,除非Google自己修复了从recaptcha.net发送到google.com的请求,否则我建议您选择像hCaptcha这样的另一个验证码服务提供商。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。