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

> Ý nghĩa HTTP 429 Too Many Requests đối với bộ thu thập dữ liệu, cách đọc Retry-After, và mã Python cho backoff với jitter. Giảm tốc; không trốn tránh.

- URL: https://crawlrelay.com/vi/docs/errors/429-too-many-requests/
- Cập nhật lần cuối: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

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ả.

**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

| Thuộc tính | Giá trị |
| --- | --- |
| 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è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)*

```bash
# 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:PASSWORD@gw.crawlrelay.com: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*

```python
import random
import time

import requests

PROXY = "http://USERNAME:PASSWORD@gw.crawlrelay.com: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](https://crawlrelay.com/vi/docs/concurrency/) để 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](https://crawlrelay.com/vi/docs/errors/403-forbidden/) · [503 Service Unavailable](https://crawlrelay.com/vi/docs/errors/503-service-unavailable/) · [Hướng dẫn đồng thời](https://crawlrelay.com/vi/docs/concurrency/).

## 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

- [401 Unauthorized vs 407](https://crawlrelay.com/vi/docs/errors/401-unauthorized/)
- [403 Forbidden](https://crawlrelay.com/vi/docs/errors/403-forbidden/)
- [407 Proxy Authentication Required](https://crawlrelay.com/vi/docs/errors/407-proxy-authentication-required/)
- [429 Too Many Requests](https://crawlrelay.com/vi/docs/errors/429-too-many-requests/)
- [502 Bad Gateway](https://crawlrelay.com/vi/docs/errors/502-bad-gateway/)
- [503 Service Unavailable](https://crawlrelay.com/vi/docs/errors/503-service-unavailable/)
- [504 Gateway Timeout](https://crawlrelay.com/vi/docs/errors/504-gateway-timeout/)
- [Cannot connect to proxy (ProxyError)](https://crawlrelay.com/vi/docs/errors/cannot-connect-to-proxy/)
- [Connection reset by peer (ECONNRESET)](https://crawlrelay.com/vi/docs/errors/connection-reset/)
- [ERR_PROXY_CONNECTION_FAILED](https://crawlrelay.com/vi/docs/errors/err-proxy-connection-failed/)
- [ERR_TUNNEL_CONNECTION_FAILED](https://crawlrelay.com/vi/docs/errors/err-tunnel-connection-failed/)
- [Read timed out (ReadTimeout)](https://crawlrelay.com/vi/docs/errors/read-timeout/)
- [SOCKS5 proxy errors](https://crawlrelay.com/vi/docs/errors/socks5-proxy-errors/)
- [SSL: CERTIFICATE_VERIFY_FAILED](https://crawlrelay.com/vi/docs/errors/ssl-certificate-verify-failed/)
- [SSL: WRONG_VERSION_NUMBER](https://crawlrelay.com/vi/docs/errors/ssl-wrong-version-number/)

**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. [Xem giá](https://crawlrelay.com/vi/pricing/) · [Bắt đầu nhanh](https://crawlrelay.com/vi/docs/)

---

CrawlRelay: CrawlRelay là dịch vụ proxy dân cư xoay vòng và proxy di động 4G/5G dành cho nhà phát triển, hỗ trợ scrapers và pipeline dữ liệu AI: traffic trả tiền theo nhu cầu không hết hạn từ 0,50 US$/GB, thanh toán bằng crypto, không cần tải lên ID. Không cần KYC — không cần ID, không chụp selfie, không giấy tờ.
