2017-03-27 89 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。 –