Trả lời nhanh
429 Too Many Requests nghĩa là gì với proxy?
429 Too Many Requests nghĩa là trang giới hạn tốc độ bạn gửi: bạn gửi nhiều yêu cầu hơn chấp nhận trong một khoảng thời gian. Cách sửa là giảm số yêu cầu, không phải tăng ẩn. Với proxy residential CrawlRelay, hãy tôn trọng header Retry-After, giới hạn đồng thời mỗi host và chờ lại theo hàm lũy thừa có jitter ngẫu nhiên. Thay đổi IP để vượt giới hạn công bố vi phạm hầu hết điều khoản sử dụng.
429 Too Many Requests nhìn nhanh
| Lỗi | 429 Too Many Requests |
|---|---|
| Loại | Mã trạng thái HTTP (4xx, lỗi phía client) |
| Gửi bởi | Trang web mục tiêu hoặc gateway API của nó |
| Định nghĩa tại | RFC 6585, section 4 (Retry-After: RFC 9110, section 10.2.3) |
| Thử lại? | Có, sau thời gian chờ Retry-After hoặc chờ lại theo hàm lũy thừa |
| Kiểm tra trước tiên | Đọc header Retry-After và xem số yêu cầu trên giây mỗi host của bạn |
429 Too Many Requests nghĩa là gì?
RFC 6585 giới thiệu mã 429 cho giới hạn tốc độ. Máy chủ có thể gửi header Retry-After, là số giây hoặc ngày HTTP, để thông báo khi quay lại. API thường có header riêng như X-RateLimit-Remaining.
429 là trả lời lịch sự nhất trang có thể gửi cho bộ thu thập dữ liệu. Nó báo nội dung có sẵn, chỉ là tốc độ bạn hiện tại quá nhanh. Trang nhận thấy 429 bị bỏ qua thường nâng lên thành 403, CAPTCHA hoặc chặn vĩnh viễn.
a 429 trông như thế nào trong Python, curl, Node.js và trình duyệt?
Cùng một lỗi nhưng hiển thị khác nhau trên mỗi công cụ. Đây là các thông báo bạn nên tìm trong nhật ký của mình:
- Python requests / httpx:
status_code == 429, thường kèmRetry-After: 30 - Scrapy: xử lý qua
RetryMiddlewarevì 429 nằm trong mặc địnhRETRY_HTTP_CODES - curl:
HTTP/2 429rồiretry-after:trong header phản hồi - API: thân JSON như
{"error": "rate_limited"}
Nguyên nhân gây ra a 429 là gì?
Khả năng đầu tiên là:
- Quá nhiều đồng thời mỗi host. Năm mươi worker song song trên một tên miền trông như tấn công với hầu hết trang.
- Không có chờ giữa các yêu cầu, hoặc chờ cố định khiến nhiều worker đồng loạt gửi.
- Thử lại không chờ. Đợt retry sau lần 429 đầu nhân đôi tải.
- Giới hạn chung. Một số trang tính yêu cầu theo tài khoản, khoá API hoặc cookie, không theo IP.
- Đầu cuối nặng. URL tìm kiếm và lọc thường giới hạn chặt hơn trang tĩnh.
Làm sao để chẩn đoán a 429 từng bước?
- Ghi lại giá trị
Retry-Aftervà bất kỳ header giới hạn tốc độ nào trên lần 429 đầu. - Đo tốc độ yêu cầu thực trên mỗi host, không tổng số.
- Kiểm tra giới hạn theo IP, cookie hay API key: thay đổi từng thứ một.
- Đọc tài liệu API hoặc robots.txt của trang; dòng
Crawl-delayđịnh tốc độ yêu cầu.
# Use the URL that fails; with https://api.ipify.org instead, you test the gateway alone.
# "HTTP/1.1 200 Connection established" first, then the site's own status: the site answered.
curl -v -x http://USERNAME:[email protected]:7777 https://TARGET_URL
# Same test through the SOCKS5 port, with DNS resolved at the exit
curl -v --socks5-hostname gw.crawlrelay.com:7778 --proxy-user USERNAME:PASSWORD https://TARGET_URLLàm sao để sửa a 429?
- Tôn trọng Retry-After. Chờ ít nhất thời gian máy chủ yêu cầu.
- Giới hạn đồng thời mỗi host, không chỉ toàn cục. Scrapy có
CONCURRENT_REQUESTS_PER_DOMAINvàAUTOTHROTTLE_ENABLED. - Chờ lại lũy thừa với jitter: 1 s, 2 s, 4 s,... kèm phần ngẫu nhiên, giới hạn tối đa.
- Giảm lấy dữ liệu. Lưu cache, gửi
If-Modified-SincehoặcIf-None-Match, bỏ qua trang không đổi. - Dùng API chính thức nếu trang có; giới hạn thường có ghi rõ.
import random
import time
import requests
PROXY = "http://USERNAME:[email protected]:7777"
PROXIES = {"http": PROXY, "https": PROXY}
RETRY_STATUSES = {429, 502, 503, 504}
def fetch(url, attempts=5, timeout=(10, 30)):
for attempt in range(attempts):
try:
r = requests.get(url, proxies=PROXIES, timeout=timeout)
except (requests.exceptions.ConnectionError, requests.exceptions.Timeout):
r = None # dropped exit, reset or timeout: a new connection gets a new exit
if r is not None and r.status_code not in RETRY_STATUSES:
return r
retry_after = r.headers.get("Retry-After", "") if r is not None else ""
if retry_after.isdigit():
wait = int(retry_after)
else:
wait = min(60, 2 ** attempt) + random.uniform(0, 1)
time.sleep(wait)
raise RuntimeError("giving up on %s after %d attempts" % (url, attempts))Có nên thử lại sau a 429 không?
Có, 429 được phép thử lại sau. Chờ Retry-After nếu máy chủ gửi; không có thì chờ lại theo hàm lũy thừa có jitter và giới hạn. Đếm số lần 429 liên tiếp mỗi host và giảm đồng thời khi cao. Hàm Python dưới đây xử lý phần cơ bản.
429 Too Many Requests áp dụng thế nào với CrawlRelay?
Một 429 qua CrawlRelay giữ nguyên header và nội dung trang mục tiêu: giới hạn là của trang, còn kiểm soát tốc độ trên mỗi host là trách nhiệm của bạn. Dùng phiên sticky khi trang tính yêu cầu theo phiên, để tốc độ dễ đo, xem hướng dẫn đồng thời để bắt đầu.
Gateway: gw.crawlrelay.com, cổng 7777 (HTTP, HTTPS qua CONNECT) và cổng 7778 (SOCKS5). Định dạng tên người dùng: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Tham khảo liên quan: 403 Forbidden · 503 Service Unavailable · Hướng dẫn đồng thời.
429 Too Many Requests: các câu hỏi thường gặp của lập trình viên
Tôi có nên quay vòng IP để tránh lỗi 429?
Không. 429 là yêu cầu trang giảm tốc. Phân bố tốc độ yêu cầu đó qua nhiều IP để tránh giới hạn theo IP là trốn tránh, và đa số điều khoản cấm. Quay vòng IP chỉ nên dùng để chia tải hoặc đổi vị trí, không phải để vượt hạn mức công bố. Giảm tốc độ và lưu cache những gì có thể.
Tôi phải chờ bao lâu sau 429?
Chờ số giây trong header Retry-After hoặc đến ngày đó. Không có header, bắt đầu từ 1–2 giây và nhân đôi thời gian chờ sau mỗi 429 kèm jitter, tối đa khoảng một phút. Quay lại với tốc độ thấp hơn, không phải tốc độ gây 429.
Tại sao tôi nhận 429 với chỉ vài yêu cầu mỗi phút?
Giới hạn có thể theo tài khoản, cookie hoặc khóa API chứ không phải IP, hoặc đầu cuối chi phí cao như trang tìm kiếm. Một số trang đặt giới hạn thấp cho khách được coi là bot. Kiểm tra header phản hồi và tài liệu API, hỏi trang cấp quyền nếu cần.
Các lỗi proxy khác trong tài liệu tham khảo này
Mã trạng thái HTTP
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Lỗi trình duyệt và client
Lỗi kết nối và TLS
Proxy dân cư với tài liệu bao gồm các trường hợp lỗi
CrawlRelay proxy dân cư từ 0,50 US$/GB, lưu lượng không bao giờ hết hạn.