You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP-cURL调用CTM API时Basic Auth授权头设置报错求助

解决PHP-cURL调用CTM API的Basic Auth认证失败问题

你的认证失败是因为Authorization请求头格式错误,正确的Basic Auth格式需要包含Basic 前缀,且不能用{{}}包裹编码后的凭证字符串。下面是两种正确的实现方式:

方式1:手动构造正确的Authorization请求头

先确保你用base64_encode()编码的是API_KEY:API_SECRET格式的字符串,然后按照Authorization: Basic [编码后的字符串]的格式构造请求头:

$apiKey = 'a20374d463f8a02b68fdc3bed8eb8bb4bb5a0c6';
$apiSecret = '16ebe4fe438b2bdf2e80599baec8f7a6bbc4';
// 编码 API_KEY:API_SECRET 格式的字符串
$encodedCredentials = base64_encode("$apiKey:$apiSecret");

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.calltrackingmetrics.com/api/v1/accounts',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    // 正确的Authorization头格式:Basic + 编码后的凭证
    "Authorization: Basic $encodedCredentials",
    'Content-Type: application/json'
  ),
));

$response = curl_exec($curl);
curl_close($curl);

echo $response;

方式2:使用cURL自带的CURLOPT_USERPWD选项(推荐)

cURL提供了专门的参数CURLOPT_USERPWD来处理Basic Auth,不需要手动构造请求头,cURL会自动完成编码和头设置,更不易出错:

$apiKey = 'a20374d463f8a02b68fdc3bed8eb8bb4bb5a0c6';
$apiSecret = '16ebe4fe438b2bdf2e80599baec8f7a6bbc4';

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.calltrackingmetrics.com/api/v1/accounts',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  // 直接传入 API_KEY:API_SECRET,cURL自动处理Basic Auth
  CURLOPT_USERPWD => "$apiKey:$apiSecret",
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json'
  ),
));

$response = curl_exec($curl);
curl_close($curl);

echo $response;

错误原因复盘

你之前的代码存在两个问题:

  1. 缺少Basic 前缀:Authorization头必须以Basic 开头,API才能识别这是Basic Auth认证方式
  2. 多余的{{}}包裹:API需要的是纯编码字符串,{{}}是文档中的占位符标记,实际代码中不需要保留

内容的提问来源于stack exchange,提问作者God Uncle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:55:04