2014-09-26 65 views
1

我試圖使用cURL從PHP進行API調用。授權標頭未使用PHP cURL設置

這是我的代碼:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://localhost/api/"); 
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array('sql' => $sql))); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: MY-API-KEY')); 
$response = curl_exec($ch); 
curl_close($ch); 

看來,如果授權頭未設置。我嘗試過Google,在那裏有人說頭沒有被正確識別。誰能幫忙? 我的代碼在沒有授權的情況下可以用於API調用。

UPDATE: 通過調用命令行工具捲曲的命令:

curl -H 'Authorization: MY-API-KEY'... 

一切正常。

我對PHP cURL的反饋是「訪問被拒絕」。

+0

我運行代碼瓦特/ PHP 5.4 - Authorization-Header/is/set(我查閱了http://www.nirsoft.net/utils/smsniff.html)。所以我想這個問題在API方面。祝你好運! – 2014-09-26 13:28:18

+0

你得到了什麼'$ response'?同時檢查'curl_error()'。 – 2014-09-26 13:41:40

+0

我沒有收到來自cURL的錯誤消息,但我從API獲取「拒絕訪問」。 – user809829 2014-09-28 09:00:31

回答

1

因爲它看起來簡化版,它的正確構造:

客戶端:

當用戶代理想要發送它可以使用授權頭中的服務器身份驗證憑據。

授權頭構造如下:

的用戶名和密碼被組合成一個字符串「用戶名:密碼」 然後將得到的字符串使用的Base64的RFC2045-MIME變體編碼,除了不限於76字符/行 授權方法和空間,即「基本」,然後放在編碼的字符串之前。 例如,如果用戶代理使用「阿拉丁」作爲用戶名和「芝麻開門」作爲密碼,然後報頭被形成爲如下:

授權:基本QWxhZGRpbjpvcGVuIHNlc2FtZQ ==

+0

從命令行工具調用相同的命令捲曲一切正常。這是我試圖調用的API:http://docs.ckan.org/en/ckan-2.1.1/api.html#authentication-and-api-keys – user809829 2014-09-26 13:39:02