Phil Sturgeon の REST Controller を使用して API を構築しています。API 認証は、API キーを使用して実行されます。現在、データベースの api_keys テーブルに定義されているキーは 1 つだけです。次の cURL リクエストを介して、このキーを使用して 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)
実際には設定されていません。オフィスにいる 3 人は、ソース管理リポジトリからチェックアウトしたまったく同じコード ベースを持っています。唯一の違いは、2 人が Apache 2.4.4 を実行しており、もう 1 人が Apache 2.2.24 を実行していることです。2.4.4 を実行している私たちの両方が無効な API キー エラーを受け取り続けていますが、2.2.24 を実行している人にとってはすべて正常に機能します。これは、Apache の問題であることを示唆していますが、その原因を突き止めることはできません。
なぜこれがこのように起こっているのか、誰にもアイデアはありますか?
前もって感謝します。