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

在VS Code中使用CCXT调用API始终返回401未授权错误求助

CCXT连接交易所API持续返回401未授权的排查方案

问题重现

连接Kraken Futures、Phemex Testnet、Coinbase Demo等多个交易所时,均返回401未授权错误,终端报错示例:

(cryptobot) PS C:\Users\jcazi\OneDrive\Desktop\Algotrading> & C:/Users/jcazi/Anaconda3/envs/cryptobot/python.exe c:/Users/jcazi/OneDrive/Desktop/Algotrading/algo_orders.py
Traceback (most recent call last):
  File "C:\Users\jcazi\Anaconda3\envs\cryptobot\lib\site-packages\ccxt\base\exchange.py", line 645, in fetch
    response.raise_for_status()
  File "C:\Users\jcazi\Anaconda3\envs\cryptobot\lib\site-packages\requests\models.py", line 1021, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://api.phemex.com/spot/wallets

使用的核心代码:

import ccxt
from keyfile import key
from keyfile import secret

phemex = ccxt.phemex ({
    'enableRateLimit': True,
    'apiKey': key,
    'secret': secret
})

phemex.fetch_balance()

已尝试操作:更换多个交易所、生成新API密钥、更新CCXT、手动输入密钥而非导入,问题仍未解决。

排查方向及解决方法

  • API权限配置缺失
    多数交易所API密钥默认无余额读取等权限,需在交易所后台手动开启对应权限(如钱包读取、交易权限)。测试网账户权限配置通常与实网独立,需单独确认测试网API的权限是否开启。
  • 测试网/实网环境混淆
    CCXT默认连接实网,若使用的是测试网API密钥,必须在初始化实例时指定测试网参数。不同交易所参数有差异:
    例如Phemex测试网需添加:
    phemex = ccxt.phemex({
        'enableRateLimit': True,
        'apiKey': key,
        'secret': secret,
        'options': {'test': True}
    })
    
    Coinbase测试网需设置sandbox: True参数。
  • 密钥格式异常
    检查密钥是否含特殊字符(如+、/、=),导入时是否带入多余空格、换行符或引号。可临时打印key和secret的长度及内容(注意保密),确认与交易所后台完全一致。
  • CCXT版本兼容性问题
    部分交易所API更新后,旧版CCXT可能存在签名逻辑不匹配的情况。可尝试安装CCXT最新开发版,或查看对应交易所的CCXT适配文档,确认参数是否有变更。
  • 网络环境拦截
    本地代理、防火墙可能拦截请求或篡改签名参数,导致验证失败。可切换网络(如手机热点)或关闭代理、防火墙后重试。
  • 签名算法特殊要求
    少数交易所签名逻辑有特殊规则(如Phemex需包含timestamp参数、特定请求参数顺序),可对比CCXT源码中对应交易所的签名实现与官方文档,若存在差异可手动补充必要参数。

内容的提问来源于stack exchange,提问作者James Cody Cazin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 18:21:01