全局使用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这样的另一个验证码服务提供商

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...