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

尝试使用EVE ESI接口时遭遇401未授权错误求助

排查EVE ESI认证返回401 Unauthorized的问题

先把你收到的错误响应整理出来:

HTTP/1.1 401 Unauthorized
Cache-Control: private
Server: Microsoft-IIS/8.5
Request-Context: appId=cid-v1:2ccf88f2-29b9-460a-bc15-7c0b79926f61
Date: Tue, 01 May 2018 00:24:50 GMT
Connection: close
Content-Length: 0

结合你提供的PHP/Curl代码片段,我帮你梳理几个最可能导致这个问题的原因,以及对应的修复方案:

1. 客户端凭证的编码与请求头配置问题

你用base64_encode("{my client ID}:{My Secret Key}")生成认证内容,但要注意两个关键点:

  • 替换占位符时,要完全保留客户端ID和密钥的原始格式,不要额外添加引号、空格这类多余字符
  • 生成的base64字符串必须放在Authorization: Basic {编码后的内容}这个请求头里,很多人会忘记配置这个头,直接导致401

2. 请求参数不完整

你的代码里$data数组只写了"grant_type" => "authorization_code",但使用authorization_code模式时,必须传递code参数(也就是用户完成授权后返回的授权码),你代码里的"co..."明显是截断了,大概率是没完整传这个参数,这是401的常见诱因。

3. Curl请求格式不符合要求

EVE ESI的token接口有明确的格式要求:

  • 请求方法必须是POST
  • Content-Type要设置为application/x-www-form-urlencoded
  • 要把参数数组用http_build_query()转成URL编码的字符串,不能直接传数组(Curl默认传数组会用multipart/form-data格式,不符合接口要求)

给你一个修正后的完整示例代码,你可以直接参考调整:

<?php
// 替换成你的实际客户端信息
$clientId = "你的客户端ID";
$secretKey = "你的密钥";
// 用户授权后拿到的code
$authCode = "用户授权返回的授权码";

// 生成Basic认证头
$authHeader = base64_encode("$clientId:$secretKey");

// 构建完整请求参数
$data = [
    "grant_type" => "authorization_code",
    "code" => $authCode,
    // 如果授权时指定了redirect_uri,这里必须和授权时的地址完全一致
    // "redirect_uri" => "你的回调地址"
];

// 初始化Curl
$ch = curl_init();

// 设置Curl核心选项
curl_setopt($ch, CURLOPT_URL, "https://login.eveonline.com/v2/oauth/token");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Basic $authHeader",
    "Content-Type: application/x-www-form-urlencoded"
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 执行请求并获取结果
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

// 关闭Curl
curl_close($ch);

// 输出调试信息
echo "HTTP状态码: $httpCode\n";
echo "响应内容: $response\n";
?>

额外检查点

  • 确认客户端ID和密钥是从EVE开发者后台正确复制的,没有手滑多打/少打字符
  • 如果授权流程里指定了redirect_uri,获取token时必须传递完全一致的地址,否则也会返回401
  • 检查你的PHP环境是否开启了Curl的SSL支持(EVE接口都是HTTPS协议,SSL禁用会导致请求失败)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:54:43