指南
速率限制
請求上限、Header 與 429 退避
各方案上限
| 方案 | 請求上限 | 併發 | 適用 |
|---|---|---|---|
| Free | 10 requests/min | 2 併發 | 測試與原型 |
| Pro | 100 requests/min | 10 併發 | 正式應用 |
| Enterprise | 1000 requests/min | 50 併發 | 大規模運作 |
回應 Header
每個回應都會包含速率限制 Header:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1714137600X-RateLimit-Reset 是 Unix epoch 時間戳。
處理 429
當你撞到 429 RATE_LIMIT_EXCEEDED,請退避到 X-RateLimit-Reset 那個 epoch —— 別盲目重試。針對暫時性錯誤再搭配指數退避:
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 的批次只佔一個請求額度,不是五十個。