指南

速率限制

请求限额、Header 与 429 退避

各套餐限额

套餐请求限额并发适用场景
Free每分钟 10 次2 并发测试与原型
Pro每分钟 100 次10 并发生产应用
Enterprise每分钟 1000 次50 并发大规模运营

响应 Header

每次响应都会带上速率限制 Header:

X-RateLimit-Limit:     100
X-RateLimit-Remaining: 87
X-RateLimit-Reset:     1714137600

X-RateLimit-Reset 是 Unix epoch 时间戳。

处理 429

碰到 429 RATE_LIMIT_EXCEEDED 时,退避到 X-RateLimit-Reset 时间点 —— 不要盲目重试。再叠加指数退避来应对瞬时错误:

import httpx, time

def call(url: str, headers: dict, body: dict, max_attempts: int = 5):
    for attempt in range(max_attempts):
        r = httpx.post(url, headers=headers, json=body, timeout=60.0)
        if r.status_code != 429:
            r.raise_for_status()
            return r.json()
        reset = int(r.headers.get("X-RateLimit-Reset", "0"))
        wait = max(reset - int(time.time()), 2 ** attempt)
        time.sleep(wait)
    raise RuntimeError("rate-limited after retries")

对批量任务,宁可发更少的大批次也不要发很多小批次 —— 一个 50 URL 的批次只算速率限制里的 1 次请求,而不是 50 次。