1

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 の問題であることを示唆していますが、その原因を突き止めることはできません。

なぜこれがこのように起こっているのか、誰にもアイデアはありますか?

前もって感謝します。

4

1 に答える 1