问题排查
行情 API 鉴权失败与限流如何排查
按“HTTP 状态 → 业务返回码 → Token → 频率”的顺序排查行情 API 鉴权失败与限流问题,附带退避重试代码。
更新时间:
维护方:AllTick 官方技术团队
适用对象:遇到鉴权失败或请求被限制的开发者
核心结论 · 30秒开发速览
先看 HTTP 状态码与响应体中的业务返回码,区分是“身份不被认可”(Token 错误、过期、无权限)还是“请求太频繁”(限流)。鉴权问题要核对 Token 来源与接口地址是否匹配;限流问题要降低频率、合并请求并加入退避重试,而不是立即重复发送。
01
判断流程
1记录完整的 HTTP 状态码、响应体和请求时间(隐去 Token)。
2响应体中 ret 不为 200 时,按 msg 判断属于鉴权类还是频率类错误。
3鉴权类:检查 Token 是否完整、是否有多余空格、是否已失效。
4权限类:检查请求的市场或接口是否在套餐范围内,例如用股票接口地址请求外汇代码。
5频率类:统计实际每秒请求数,对照套餐的频率限制。
02
常见原因对照
| 现象 | 最可能的原因 | 修复 |
|---|---|---|
| 所有请求都失败 | Token 未传或拼写错误 | 打印 Token 长度与前后几位核对 |
| 本地成功、服务器失败 | 服务器环境变量未设置 | 检查部署环境的变量配置 |
| 股票成功、外汇失败 | 接口地址与资产类别不匹配 | 外汇使用 quote-b-api,股票使用 quote-stock-b-api |
| 一段时间后开始失败 | 超出频率或额度限制 | 降低频率,加入退避 |
| 多进程同时失败 | 多个进程共享 Token 叠加了频率 | 集中调度请求或使用缓存 |
03
退避重试示例
pythonpython
import os, random, timeimport requestsdef get_with_backoff(url: str, params: dict, retries: int = 5) -> dict: delay = 1.0 for attempt in range(retries): resp = requests.get(url, params=params, timeout=10) body = resp.json() if resp.content else {} if resp.status_code == 401 or body.get("ret") == 401: raise RuntimeError(f"鉴权失败 (ret=401): {body.get('msg', 'token invalid')}") if resp.ok and body.get("ret") == 200: return body if attempt == retries - 1: raise RuntimeError(f"重试耗尽:status={resp.status_code} body={body}") time.sleep(delay + random.uniform(0, 0.5)) delay = min(delay * 2, 30) return {}if __name__ == "__main__": url = "https://quote.alltick.co/quote-stock-b-api/trade-tick" params = { "token": os.getenv("ALLTICK_API_TOKEN", "YOUR_API_TOKEN"), "query": '{"trace":"backoff-test","data":{"symbol_list":[{"code":"700.HK"}]}}', } print(get_with_backoff(url, params))04
降低请求量的方法
- 一次请求查询多个标的(symbol_list),而不是逐个请求。
- 实时场景改用 WebSocket 推送,替代高频轮询。
- 对短时间内不变的数据做缓存,多个服务共享结果。
- 把请求集中到一个调度进程,避免多进程叠加频率。
规范来源与验证记录 · 2026-10-13
已根据下方一手资料核对相关端点、字段与交易所规则。
Python 示例已在 Python 3.14.0 上通过 ast.parse 语法解析;此检查不验证依赖安装、运行兼容性或网络响应。
本轮未使用真实 Token 执行 AllTick 请求,也未完成生产端到端测试。复现时请记录套餐、依赖版本、交易时段、ret/trace 与实际结果。
一手规范与规则
上线前建议复现
- 测试缺失、撤销和权限不匹配 Token,独立检查 HTTP 与 ret/msg;权限及配额错误不一定使用 HTTP 401/429。
- 共用 Token 的 worker 统一限流,使用有上限的抖动退避,停止永久鉴权错误重试并保留脱敏 trace 与时间。