在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测试网需添加:
Coinbase测试网需设置phemex = ccxt.phemex({ 'enableRateLimit': True, 'apiKey': key, 'secret': secret, 'options': {'test': True} })sandbox: True参数。 - 密钥格式异常
检查密钥是否含特殊字符(如+、/、=),导入时是否带入多余空格、换行符或引号。可临时打印key和secret的长度及内容(注意保密),确认与交易所后台完全一致。 - CCXT版本兼容性问题
部分交易所API更新后,旧版CCXT可能存在签名逻辑不匹配的情况。可尝试安装CCXT最新开发版,或查看对应交易所的CCXT适配文档,确认参数是否有变更。 - 网络环境拦截
本地代理、防火墙可能拦截请求或篡改签名参数,导致验证失败。可切换网络(如手机热点)或关闭代理、防火墙后重试。 - 签名算法特殊要求
少数交易所签名逻辑有特殊规则(如Phemex需包含timestamp参数、特定请求参数顺序),可对比CCXT源码中对应交易所的签名实现与官方文档,若存在差异可手动补充必要参数。
内容的提问来源于stack exchange,提问作者James Cody Cazin
相关产品推荐
相关产品推荐

