0

我想连接到 Redmine API。该页面受.htaccess文件保护。只要.htaccess和 Redmine 的用户凭据(名称 + 密码)相同,就没有任何问题。

嗯......我的两个队友正在使用不同的凭据(他们的错误代码:)401, not authorized,他们只是不想更改它们。

实际上,我认为这是因为他们没有通过.htaccess(使用他们的凭据)或者他们通过.htaccess但无法将 Redmine 与他们的数据一起使用。

我一直在寻找几个小时(嗯,至少从 12:30 点开始),但无法解决这个问题。我只是不知道如何.htaccess正确传递和 API 凭据。

我的代码:

$sURL = 'https://myserver/redmine/';
$sAction = 'projects.json';
$sApiUser = 'user_name';
$sApiPass = 'user_pass';
$sHtAccUser = 'htacc_user';
$sHtAccPass = 'htacc_pass';
#$sURL = sprintf('https://%s:%s@myserver/redmine/',$sUser,$sPass);

$aOptions   = array(
    CURLOPT_RETURNTRANSFER  => TRUE,
    CURLOPT_USERPWD         => $sUser.':'.$sPass,
    CURLOPT_PORT            => 443,
    CURLOPT_CONNECTTIMEOUT  => 4,
    CURLOPT_TIMEOUT         => 6,
    CURLOPT_SSL_VERIFYPEER  => FALSE,
    CURLOPT_SSL_VERIFYHOST  => FALSE,
    CURLOPT_HTTPAUTH        => CURLAUTH_BASIC,
    CURLOPT_HEADER          => FALSE,
    #CURLOPT_HTTPHEADER     => array('Authorization: Basic '.base64_encode($sHtAccUser.':'.$sHtAccPass)),
    CURLOPT_FOLLOWLOCATION  => TRUE,
    CURLOPT_URL             => $sURL.$sAction.$sGetParamQuery);

$ch = curl_init();
if($ch === false)
{
    die('Failed to create curl object');
}           
curl_setopt_array($ch,$aOptions);
$mResult = curl_exec($ch);
$aCurlInfo = curl_getinfo($ch);     
$iHTTPStatus = (int) $aCurlInfo['http_code'];
curl_close($ch);
4

1 回答 1

0

因此,在与更有经验的人交谈后,我可以“自己”解决问题。

实际上,htaccess 和 redmine 使用相同的认证方式(HTTP Basic 认证),不能使用两次。出于这个原因,我必须使用单独的 API 密钥(您可以在您自己的 redmine 上的 /my/account 中找到它)。

只要两个凭据(htaccess + redmine)相同,您就不需要 API 密钥。如果凭据不同...好吧,您必须登录 redmine,获取您的 API 密钥并使用它。也许不是一个舒适的方式,但实际上是要走的路。

于 2014-07-24T09:35:21.887 回答