不打印JSON响应(cURL)

时间:2017-03-27 15:54:22

标签: php json http curl

我正在使用网络表单上的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,但这也不起作用。

4 个答案:

答案 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);