我正在使用 Phil Sturgeon 的 REST 控制器来构建 API。API 身份验证是使用 API 密钥执行的。目前在数据库的 api_keys 表中只定义了一个键,我已经设置我的客户端通过以下 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 个人从源代码控制存储库中签出了完全相同的代码,唯一的区别是我们两个运行 Apache 2.4.4,另一个运行 Apache 2.2.24。我们俩都运行 2.4.4 不断收到无效的 API 密钥错误,但对于运行 2.2.24 的人来说一切正常,这表明这是一个 Apache 问题,但我们无法深入了解它。
有人知道为什么会这样吗?
提前致谢。