Không cần KYC — không cần ID, không selfie, không giấy tờ. Thanh toán bằng crypto: BTC, USDT, USDC, ETH, SOL, LTC
Ngôn ngữ: Tiếng Việt
Bắt đầu ngay

Tham khảo lỗi proxy · Mã trạng thái HTTP

429 Too Many Requests khi thu thập: ý nghĩa và cách khắc phục

Mã trạng thái HTTP (4xx, lỗi phía client): thông báo chính xác trong từng công cụ, nguyên nhân có thể theo thứ tự, và cách sửa hiệu quả.

Cập nhật lần cuối: · 6 phút đọc

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ỗi429 Too Many Requests
LoạiMã trạng thái HTTP (4xx, lỗi phía client)
Gửi bởiTrang web mục tiêu hoặc gateway API của nó
Định nghĩa tạiRFC 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èm Retry-After: 30
  • Scrapy: xử lý qua RetryMiddleware vì 429 nằm trong mặc định RETRY_HTTP_CODES
  • curl: HTTP/2 429 rồi retry-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?

  1. Ghi lại giá trị Retry-After và bất kỳ header giới hạn tốc độ nào trên lần 429 đầu.
  2. Đo tốc độ yêu cầu thực trên mỗi host, không tổng số.
  3. Kiểm tra giới hạn theo IP, cookie hay API key: thay đổi từng thứ một.
  4. Đọc tài liệu API hoặc robots.txt của trang; dòng Crawl-delay định tốc độ yêu cầu.
Kiểm tra URL bị lỗi với curl (cổng HTTP, chi tiết)
# 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_URL

Là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_DOMAIN và 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-Since hoặc If-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õ.
Python: thử lại với Retry-After, độ trễ lũy thừa và jitter
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

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.

Từ 0,50 US$/GB · không cần KYC

Bắt đầu ngay