2017-03-27 94 views
-2

我正在使用reCAPATCHA在Web窗体上。我通过cURL验证了CAPTCHA服务器端。不打印JSON响应(cURL)

$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" ] }

会发生什么事是卷曲自动打印JSON的浏览器,阻止我重定向页面。有没有办法阻止cURL打印JSON或以不同的方式重定向?我试图通过文档和其他地方寻找,并没有找到答案。我也尝试将$response作为字符串打印并将其编码为JSON,但这也不起作用。

+0

不添加给出的回答你能告诉我你已经保存在您的变量'$ response'什么反应 –

+0

请分享你'$ response' –

回答

-1

我找到了解决方案。当我添加curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);时,脚本不会正确验证响应,因为它是针对布尔值而不是字符串进行验证。我需要添加该行并在'true'附近加上引号。

+1

删除此答案,并用此短语编辑您的问题; – hassan

1

此添加到您卷曲SETOPT

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
+0

这并不因为工作所得到的反应它将'$ response'作为字符串输出,而不是JSON。我需要成为JSON。 –

0

一个快速的解决方案可以将使用这个脚本是如何服务,并从JavaScript调用。最后在Javascript中重定向。

+0

它需要位于外部PHP脚本中。 –

0

会发生什么事是卷曲自动打印JSON的浏览器,

,所以你需要:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

然后,以能够操纵你的JSON,你需要解码它如下:

$response = json_decode($response, true); 

然后你可以很容易地检查它作为你的wrot E在你的脚本

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"); 
} 
+0

当我这样做时,它没有正确验证。 –

+0

它是如何验证呢? – hassan

+0

即使JSON值为false,它也会返回true。 –