我使用以下PHP来验证google recaptcha:
function checkCapcha($ response,$ ip){
try {
$url = 'https://www.google.com/recaptcha/api/siteverify';
$data = ['secret' => $secret,
'response' => $response,
'remoteip' => $ip];
$options = [
'http' => [
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data)
]
];
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
//return json_decode($result)->success;
//echo $result;
if(json_decode($result)->success){
return true;
}else{
return false;
}
}
catch (Exception $e) {
return null;
}
}
它可以在我的家庭服务器上完美运行,但是当我在我的linode上使用相同的代码时,需要很长时间才能返回结果。结果是正确的,但大约需要3分钟。
有人可以提供建议吗。
提前致谢
答案 0 :(得分:0)
我有同样的问题。平均需要2000毫秒才能从Google API获得响应。
问题是,如果我使用curl
,那就太慢了。如果我切换回普通file_get_contents
功能,它的工作速度会更快(即正常时间)。
现在,当我认为curl
可能是罪魁祸首时,并不像我定位另一个HTTPS API那样,它可以快速完美地工作。
curl
花99%的时间等待Google API回复内容,即[starttransfer_time] => 2.332313
这真的很奇怪。
所以解决方案是在这个用例中避免使用curl
并切换到file_get_contents
,即使它不是罪魁祸首!
答案 1 :(得分:0)
我使用Centos 7,我遇到了同样的问题。
首先添加www.google.com
/etc/hosts
记录(如果这可以解决您的问题),而不是关闭服务器上的IPV6。
在/etc/sysctl.conf
:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
要使设置生效,请执行:
sysctl -p