跳到正文
AllTick
问题排查

行情 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, time
import requests
def 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 与时间。