我使用菲爾鱘魚的REST控制器構建一個API。 API認證使用API密鑰執行。目前有在數據庫上api_keys表只定義了一個鍵,我已經建立我的客戶通過以下捲曲請求訪問使用該密鑰的API:笨REST API管和認證
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $uri);
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
curl_setopt($ch, CURLOPT_MAXREDIRS, 1);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 45);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/html; charset=utf-8',
'Accept: application/html',
'X_API_PREFIX: ' . $this->apiPrefix(),
'X_API_KEY: ' . $this->apiKey(),
"User-Agent: ShowHouse/" . ShowhouseClient::API_CLIENT_VERSION . '; PHP ' . phpversion() . ' [' . php_uname('s') . ']';
'Accept-Language: ' . $this->_acceptLanguage
));
curl_setopt($ch, CURLOPT_USERPWD, $this->apiKey());
if ('POST' == $method)
{
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
else if ('PUT' == $method)
{
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
else if('GET' != $method)
{
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
}
$response = curl_exec($ch);
不過,我不斷收到無效的API密鑰從API服務器迴應。這個問題似乎是對在REST_Controller.php以下行:
if (($key = isset($this->_args[$api_key_variable]) ? $this->_args[$api_key_variable] : $this->input->server($key_name)))
兩個
$this->_args[$api_key_variable]
和
$this->input->server($key_name)
實際上並沒有設置。辦公室裏我們三個人的代碼完全一樣,都是從源代碼控制庫中檢出的,唯一的區別是我們兩個人運行Apache 2.4.4,另一個運行Apache 2.2.24。我們兩個運行2.4.4的人都會得到一個無效的API密鑰錯誤,但對於運行2.2.24的人來說,這一切都可以正常工作,這意味着這是一個Apache問題,但我們無法深入其中。
任何人任何想法,爲什麼會發生這樣嗎?
在此先感謝。