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

Python3连接Coinbase Advanced Trade API遇401未授权错误

解决Coinbase Advanced Trade API 401未授权错误

以下是你代码中导致授权失败的核心问题及对应修复方案:

1. 时间戳生成错误

你通过time.mktime(date_time.timetuple())转换UTC时间时,会得到本地时区的时间戳而非UTC标准时间戳,这直接导致签名验证时时间不匹配。同时,CB-ACCESS-TIMESTAMP请求头要求传入字符串类型的秒级时间戳,你当前传入的整数类型不符合HTTP头格式要求。

修复:
直接用time.time()获取UTC秒级时间戳,转为整数后再转成字符串:

timestamp = str(int(time.time()))

2. 请求路径格式不匹配

签名计算时的request_path必须与实际请求的路径完全一致。你当前的request_path是'api/v3/brokerage/accounts',但实际请求路径是'/api/v3/brokerage/accounts'(带开头斜杠),路径不一致会导致签名验证失败。

修复:
将request_path改为带开头斜杠的格式:

request_path = '/api/v3/brokerage/accounts'

修复后的完整代码

import time
import hmac
import hashlib
import http.client

secret_key = '***'    # 替换为你的密钥
api_key = '***'       # 替换为你的API Key

# 生成正确的UTC秒级时间戳(字符串类型)
timestamp = str(int(time.time()))

method = "GET"
request_path = '/api/v3/brokerage/accounts'
body = ''
message = timestamp + method + request_path + body
# 计算HMAC-SHA256签名
signature = hmac.new(secret_key.encode('utf-8'), message.encode('utf-8'), hashlib.sha256).hexdigest()

headers = {
    'accept': 'application/json',
    'CB-ACCESS-KEY': api_key,
    'CB-ACCESS-TIMESTAMP': timestamp,
    'CB-ACCESS-SIGN': signature
}

conn = http.client.HTTPSConnection("api.coinbase.com")
payload = ''

conn.request("GET", "/api/v3/brokerage/accounts", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))

额外检查项

  • 确认API密钥是在Coinbase Advanced Trade平台生成的(建议重新生成而非沿用旧Coinbase Pro密钥),且已为密钥开启view账户权限。
  • 检查本地服务器时间与UTC时间的偏差,若差值超过30秒,Coinbase会直接拒绝请求,需同步服务器时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:40:41