使用Coinspot API开发Python交易机器人时的密钥认证问题
Coinspot API认证失败(401/无效nonce)修复方案
问题原因分析
API密钥格式错误
你将api_key定义为字节串(b""),但请求头中的key字段需要传递字符串类型值,字节串会导致服务器无法正确识别密钥,触发401认证失败。Payload传递位置错误
Coinspot API要求POST请求的参数(包括nonce)放在请求体中,而你使用params=payload将参数拼接到URL上,服务器无法读取到正确的nonce,因此返回"invalid/missing nonce"错误。
修正后的代码
import requests import hmac import hashlib import time import json # API密钥用字符串,无需加b前缀 api_key = "AAA-BBB-CCC" # 密钥保持字节串格式,符合HMAC计算要求 secret = b"AAA-BBB-CCC" url = "https://www.coinspot.com.au/api/v2/ro/status" payload = { 'nonce': int(time.time() * 1000) } payload_json = json.dumps(payload) # 签名计算逻辑不变 sign = hmac.new(secret, payload_json.encode(), digestmod=hashlib.sha512).hexdigest() headers = { 'Content-Type': 'application/json', 'key': api_key, 'sign': sign, } # 使用json参数传递请求体,而非params response = requests.post(url=url, headers=headers, json=payload) print(response.text)
额外注意事项
- 确认在Coinspot官网生成的API密钥已启用对应权限,且密钥未泄露
- Nonce必须是严格递增的数值,毫秒时间戳可满足大部分场景,若短时间内频繁请求,可在时间戳基础上追加计数器确保唯一性
- 避免硬编码密钥,建议通过环境变量读取敏感信息
内容的提问来源于stack exchange,提问作者Josh Trapman
相关产品推荐
相关产品推荐

