PHP Bearer Token调用API报错:Authorization Header Not Found求助
针对你遇到的API调用返回“Authorization Header Not Found”问题,可按以下步骤逐一排查:
验证服务器是否接收到Authorization头
有些服务器(如Apache以CGI模式运行PHP)会默认丢弃Authorization头。在你的usersapi.php开头添加代码,打印所有请求头,确认头是否到达后端:// 方式1:使用getallheaders(仅适用于Apache模块模式) print_r(getallheaders()); // 方式2:兼容所有PHP运行模式的获取方式 $headers = []; foreach ($_SERVER as $key => $value) { if (str_starts_with($key, 'HTTP_')) { $headerName = str_replace(['HTTP_', '_'], ['', '-'], $key); $headerName = ucwords(strtolower($headerName), '-'); $headers[$headerName] = $value; } } print_r($headers);若输出中没有Authorization头,可在API所在目录的
.htaccess添加以下配置,强制服务器保留该头:RewriteEngine On RewriteCond %{HTTP:Authorization} ^(.+)$ RewriteRule .* - [E=HTTP_AUTHORIZATION:%1]检查CURL是否正确发送请求头
开启CURL的VERBOSE模式,查看实际发送的请求内容,确认Authorization头是否被正确发出:$apiUrl = 'https://anabatic.com/api/usersapi.php?op=view'; $token = '2E59DDE3B0700F63055A0F1BCB6D2FEB'; $ch = curl_init($apiUrl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Authorization: Bearer ' . $token, ]); // 开启VERBOSE日志 curl_setopt($ch, CURLOPT_VERBOSE, true); $verboseLog = fopen('php://temp', 'w+'); curl_setopt($ch, CURLOPT_STDERR, $verboseLog); $response = curl_exec($ch); // 打印VERBOSE日志 rewind($verboseLog); echo "CURL 请求日志:\n" . stream_get_contents($verboseLog); // 后续错误处理代码不变... curl_close($ch);查看日志中的请求头部分,确认是否包含
Authorization: Bearer 2E59DDE3B0700F63055A0F1BCB6D2FEB。排查中间件是否过滤请求头
如果API前端有代理、CDN或Nginx等中间件,需确认这些服务的配置是否允许转发Authorization头。例如Nginx需要显式配置:proxy_set_header Authorization $http_authorization;临时测试:用URL参数传递Token
若头传递始终失败,可临时改用URL参数传递Token进行测试,同时修改API端逻辑适配:// 调用端修改URL $apiUrl = 'https://anabatic.com/api/usersapi.php?op=view&token=' . $token; // 移除CURLOPT_HTTPHEADER相关配置API端从
$_GET['token']获取Token并验证(注意:此方式安全性低于Header传递,仅用于排查)。确认Token拼接格式
再次验证Authorization头的拼接是否正确,确保Bearer和Token之间有且仅有一个空格:echo 'Authorization: Bearer ' . $token; // 输出检查格式是否正确
内容的提问来源于stack exchange,提问作者Bagas Fighma
相关产品推荐
相关产品推荐

