我正在使用网络表单上的reCAPATCHA。我通过cURL验证CAPTCHA服务器端。
$post = [
'secret' => '6LeGbxkUAAAAAGOiOLDlzRiLV6JBMSF5nTyObE9G',
'response' => $_POST['g-recaptcha-response'],
'remoteip' => $_SERVER['REMOTE_ADDR']
];
//cURL and confirm the reCAPTCHA
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify");
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$response = curl_exec($ch);
curl_close($ch);
if($response['success'] == true) {
header("Location: https://website.com/contact.php?res=1");
} else {
//print('reCAPTCHA failed.');
header("Location: https://website.com/contact.php?res=2");
}
JSON响应为{ "success": false, "error-codes": [ "missing-input-response" ] }
cURL会自动将JSON打印到浏览器,阻止我重定向页面。有没有办法阻止cURL打印JSON或重定向不同的方式?我试过浏览文档和其他地方,但没有找到答案。我也尝试将$response
打印为字符串并将其编码为JSON,但这也不起作用。
答案 0 :(得分:1)
将此添加到curl setopt
中curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
答案 1 :(得分:0)
快速解决方案可以使用此脚本如何服务,并从Javascript调用。最后在Javascript中重定向。
答案 2 :(得分:0)
我找到了解决方案。当我添加curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
时,脚本无法正确验证响应,因为它是针对布尔值而不是字符串进行验证的。我需要添加该行并在'true'
附近加上引号。
答案 3 :(得分:0)
cURL会自动将JSON打印到浏览器,
所以你需要:
for ( var i = 0; i <= 80; i++) {
if (![51,60,69,78].includes(i))
$("grid" + i).hide();
}
然后,为了能够操作你的json,你需要按如下方式对其进行解码:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
然后您可以在脚本中轻松检查
$response = json_decode($response, true);