2014-11-06 54 views
2

我已經能夠使用高級Rest Rest Client Extension for chrome將POST查詢發送到特定的HTTPS服務器,並且獲得狀態碼:200 - 確定與我在這段代碼中使用的字段相同,但是當我運行下面的代碼時,我得到這個響應:403 - 訪問被拒絕。在PHP中使用cURL和x-www-form-urlencoded進行POST返回拒絕訪問

<?php 
$postData = array(
'type' => 'credentials', 
'id' => 'exampleid', 
'secret_key' => 'gsdDe32dKa' 
); 

// Setup cURL 
$ch = curl_init('https://www.mywebsite.com/oauth/token'); 
curl_setopt_array($ch, array(
CURLOPT_POST => TRUE, 
CURLOPT_RETURNTRANSFER => TRUE, 
CURLOPT_HTTPHEADER => array('Content-Type: application/x-www-form-urlencoded' 
), 
CURLOPT_POSTFIELDS => json_encode($postData) 
)); 

// Send the request 
$response = curl_exec($ch); 

var_dump($response); 

// Check for errors 
if($response === FALSE){ 
die(curl_error($ch)); 
} 

// Decode the response 
$responseData = json_decode($response, TRUE); 

// Print the date from the response 
echo $responseData['published']; 
?> 

我注意到還有,當我使用高級REST客戶端Chrome擴展程序,如果我設置的內容類型爲application/JSON我必須輸入用戶名和我不知道密碼那是因爲即使我輸入了代碼中的id和密鑰,它也會返回401 Unauthorized。所以我猜這個我寫的代碼並不是強制它的內容類型:application/x-www-form-urlencoded,但我不確定。謝謝你對這個問題的任何幫助!

回答

4

你可以嘗試這樣的,看看是否有幫助:

curl_setopt_array($ch, array(
    CURLOPT_POST => TRUE, 
    CURLOPT_RETURNTRANSFER => TRUE, 
    CURLOPT_COOKIEFILE => 'cookie.txt', 
    CURLOPT_COOKIEJAR => 'cookie.txt', 
    CURLOPT_USERPWD => 'username:password', //Your credentials goes here 
    CURLOPT_HTTPHEADER => array('Content-Type: application/x-www-form-urlencoded'), 
    CURLOPT_POSTFIELDS => http_build_query($postData), 
)); 

我想在網站上的期待,你已經提供的secret_key的頂部簡單的身份驗證。
此外,它可以發送一個Cookie,以防萬一在下次Curl調用中存儲它並再次使用它是個好主意。

+0

我只是想知道爲什麼你改變'我的代碼'json_encode($ postData)'爲'http_build_query()'。順便說一句,我試圖使用CURLOPT_USERPWD,但我得到了同樣的錯誤。我想知道哪兩個用表單格式的json_encode或http_build_query發送值?感謝您的幫助 – VaTo 2014-11-06 18:30:29

+0

好吧 - 試試我的代碼,並告訴我結果 – 2014-11-07 03:33:01

+1

非常感謝,像'json_encode'這樣的東西在我的情況下工作得更糟! – 2017-05-25 09:23:21