使用Coinbase Advanced Trade API时granularity参数无效问题排查
解决Coinbase Advanced Trade API蜡烛图接口请求体传参报错问题
核心原因
这个接口实际仅支持通过URL查询字符串传递参数,哪怕官方文档可能描述允许请求体传参,后端也不会解析请求体中的参数。当你把granularity放在请求体里时,接口根本没读取到这个参数,相当于未正确传递该参数,所以返回"granularity参数无效"的错误。
为什么URL传参有效
当你把参数放在URL查询字符串中时,后端会正确解析这些参数,granularity=ONE_DAY被正常识别,接口能返回符合要求的数据。
代码修正示例
如果你的代码之前是用POST请求+JSON请求体传参,改成GET请求+查询参数的方式即可:
import requests from coinbase_advanced_trade.auth import CoinbaseAuth # 假设使用官方认证库 # 初始化认证 auth = CoinbaseAuth(api_key="YOUR_API_KEY", api_secret="YOUR_API_SECRET") product_id = "BTC-USD" # 定义参数:start/end为秒级时间戳,granularity使用枚举值 candle_params = { "start": "1698844800", "end": "1699449600", "granularity": "ONE_DAY" } # 构造请求URL,参数通过params传递(自动拼接为查询字符串) url = f"https://api.coinbase.com/api/v3/brokerage/products/{product_id}/candles" response = requests.get(url, params=candle_params, auth=auth) # 处理响应 if response.status_code == 200: print(response.json()) else: print(f"请求失败: {response.json()}")
额外说明
这种文档与实际实现不一致的情况在API中偶尔会出现,优先以实际可运行的调用方式为准。如果需要确认参数的合法值,除了参考文档,也可以通过不传参数时返回的默认数据反推,或者测试不同的查询参数组合。
内容的提问来源于stack exchange,提问作者apt45
相关产品推荐
相关产品推荐

