Lỗi 429 Too Many Requests: vì sao bị và xử lý thế nào
Cập nhật:
Lỗi 429 Too Many Requests nghĩa là máy chủ đã nhận quá nhiều request từ bạn trong một khoảng thời gian và tạm thời từ chối phục vụ. Đây không phải lỗi proxy hỏng hay sai mật khẩu, mà là tín hiệu bạn đang đi nhanh hơn mức website cho phép. Cách xử lý đúng gồm ba việc: dừng lại theo thời gian mà header Retry-After gợi ý, thử lại với độ trễ tăng dần (backoff), và giảm số request dồn lên mỗi IP bằng cách hạ tốc độ hoặc chia tải cho nhiều IP hơn. Bài này giúp bạn xác định 429 đến từ đâu, đọc nó thế nào và sửa tận gốc.
429 khác gì các lỗi hay gặp khi dùng proxy
Khi chạy tool hay script qua proxy, bạn có thể gặp nhiều mã lỗi trông na ná nhau. Phân biệt đúng giúp bạn khỏi sửa nhầm chỗ, ví dụ đổi mật khẩu proxy trong khi vấn đề nằm ở tốc độ gửi request.
- Gặp 407 thì đọc cách sửa lỗi 407 Proxy Authentication Required; gặp timeout thì xem lỗi proxy timeout.
| Mã lỗi | Ai trả về | Ý nghĩa thường gặp | Hướng xử lý |
|---|---|---|---|
| 429 Too Many Requests | Website hoặc API đích | Gửi quá nhiều request trong một cửa sổ thời gian | Chờ, backoff, giảm nhịp, chia tải IP |
| 403 Forbidden | Website đích | Bị từ chối truy cập, có thể do IP, vân tay hoặc quy tắc tường lửa | Xem lại header, hành vi, loại IP |
| 503 Service Unavailable | Website đích hoặc CDN | Máy chủ quá tải hoặc đang bảo trì, đôi khi dùng thay cho 429 | Chờ và thử lại, đọc Retry-After |
| 407 Proxy Authentication Required | Máy chủ proxy | Sai user, mật khẩu hoặc định dạng | Sửa thông tin xác thực |
| Timeout | Không ai trả lời kịp | Mạng chậm, proxy hoặc website không phản hồi | Kiểm tra kết nối, tăng timeout hợp lý |
Vì sao bạn bị 429
- Gửi quá dày từ một IP: nhiều luồng cùng đi qua một proxy, hoặc vòng lặp không có độ trễ.
- Thử lại ngay lập tức: mỗi lần lỗi lại gửi lại liền, làm số request tăng gấp nhiều lần đúng lúc website đang siết.
- Nhiều tool dùng chung một IP: hai, ba script hay cả nhóm cùng cắm vào một proxy mà không ai biết tổng số request.
- Hạn mức theo tài khoản hoặc API key: API giới hạn số lần gọi mỗi phút cho mỗi key, đổi IP không thay đổi được hạn mức này.
- Cả dải IP bị siết: một số hệ thống chống bot đánh giá theo dải hoặc nhà cung cấp hạ tầng, không chỉ từng IP.
- IP dùng chung với người khác: với proxy chia sẻ, request của người khác cũng tính vào ngưỡng. Proxy riêng loại bỏ được nguyên nhân này.
Bước 1: xác định 429 đến từ đâu
Trước khi sửa, hãy chắc chắn 429 do website đích trả về. In toàn bộ header phản hồi và xem các trường như Server, Retry-After hay các header giới hạn tốc độ. Thử mở cùng URL đó qua cùng proxy bằng curl -x http://user:pass@ip:port -I https://ten-mien/duong-dan. Nếu request đến trang khác như trang kiểm tra IP của tôi vẫn thành công qua proxy đó, proxy hoạt động bình thường và giới hạn nằm ở website đích.
Tiếp theo, xem 429 xuất hiện theo kiểu nào. Nếu chỉ một IP bị trong khi IP khác vẫn ổn, ngưỡng đang tính theo IP. Nếu mọi IP cùng bị một lúc, nhiều khả năng ngưỡng tính theo tài khoản, API key, phiên hoặc cả dải, và thêm IP sẽ không giải quyết được.
Bước 2: tôn trọng Retry-After và viết backoff
Header Retry-After có thể là số giây hoặc một mốc thời gian. Nếu có, chờ đúng khoảng đó rồi mới thử lại. Nếu không có, dùng backoff theo cấp số nhân: lần đầu chờ vài giây, mỗi lần sau gấp đôi, cộng thêm một phần ngẫu nhiên, và dừng sau một số lần thử cố định.
- Python với
requests: đọcwait = r.headers.get('Retry-After'); nếu là số thìtime.sleep(int(wait)), nếu không thìtime.sleep(min(60, 2 ** attempt) + random.uniform(0, 1)). - Scrapy: thêm
429vàoRETRY_HTTP_CODES, bậtAUTOTHROTTLE_ENABLED = Truevà giảmCONCURRENT_REQUESTS_PER_DOMAIN. - Thư viện có sẵn:
urllib3.util.Retryvớistatus_forcelist=[429, 503],backoff_factorvàrespect_retry_after_header=True, gắn vàoHTTPAdaptercủa Session. - Đặt giới hạn số lần thử, ví dụ năm lần, rồi ghi URL vào hàng đợi chạy lại sau thay vì thử mãi.
Bước 3: giảm nhịp và phân bổ lại IP
Backoff chỉ chữa triệu chứng. Để hết 429 lâu dài, tổng số request trên mỗi IP phải nằm dưới ngưỡng của website. Đầu tiên giảm số luồng đồng thời và thêm độ trễ ngẫu nhiên giữa các request. Sau đó, nếu khối lượng công việc thực sự cần nhanh hơn, chia tải cho nhiều IP riêng, mỗi IP giữ nhịp an toàn của nó. Cách tự xoay một danh sách IP được trình bày trong bài xoay danh sách proxy trong Python.
Khi một IP nhận 429, cho IP đó nghỉ vài phút thay vì chuyển ngay request sang IP kế tiếp với cùng nhịp cũ. Nếu bạn chỉ đổi IP mà không giảm tốc, cả nhóm sẽ lần lượt chạm ngưỡng. Cách đo ngưỡng và tính số IP cần có trong bài giới hạn tốc độ khi cào dữ liệu.
Khi gặp 429 lúc dùng trình duyệt hoặc tool tài khoản
Không chỉ script mới gặp 429. Trình duyệt antidetect mở nhiều profile cùng lúc trên một IP, tool đăng bài hàng loạt hay ứng dụng tự làm mới trang liên tục đều có thể chạm ngưỡng. Hãy kiểm tra xem bao nhiêu profile đang dùng chung một proxy, tắt tính năng tự làm mới, và giãn lịch thao tác. Với tài khoản mạng xã hội, 429 thường là cảnh báo sớm rằng hành vi đang quá nhanh; tiếp tục ép tốc độ có thể dẫn tới khoá tạm thời, và proxy không làm tài khoản miễn nhiễm với việc đó.
Nếu bạn dùng proxy chia sẻ giá rẻ, ngưỡng có thể bị người khác tiêu hết trước bạn. Proxy IPv4 riêng, mỗi IP cấp cho một khách, giúp bạn biết chắc toàn bộ request trên IP là của mình.
Checklist xử lý 429
- Xác nhận 429 đến từ website đích, không phải lỗi proxy.
- Đọc và tôn trọng
Retry-After. - Backoff theo cấp số nhân có thêm phần ngẫu nhiên, giới hạn số lần thử.
- Giảm số luồng đồng thời trên mỗi IP và mỗi domain.
- Cho IP vừa bị 429 nghỉ, không đổ dồn sang IP khác.
- Nếu mọi IP cùng bị, xem lại hạn mức tài khoản, API key hoặc hành vi thay vì mua thêm IP.
- Ghi log URL, IP, mã trạng thái và thời điểm để thấy xu hướng.
Câu hỏi thường gặp
Lỗi 429 có phải do proxy bị hỏng không?
Không. 429 là phản hồi của website đích khi bạn gửi quá nhiều request. Proxy hỏng thường cho lỗi kết nối, timeout hoặc 407 nếu sai xác thực.
Bị 429 thì phải chờ bao lâu?
Nếu có header Retry-After thì chờ đúng giá trị đó. Nếu không có, bắt đầu từ vài giây và tăng gấp đôi mỗi lần thử lại, kèm giới hạn tối đa.
Đổi sang IP khác có hết 429 không?
Chỉ khi ngưỡng tính theo IP, và chỉ tạm thời nếu bạn không giảm nhịp. Nếu ngưỡng tính theo tài khoản, API key hay phiên, đổi IP không có tác dụng.
Proxy riêng có giúp giảm 429 không?
Có ở mức hợp lý: proxy riêng loại bỏ request của người khác trên cùng IP, nên ngưỡng chỉ tính cho bạn. Nhưng nếu chính bạn gửi quá dày, proxy riêng vẫn sẽ nhận 429.
IP riêng để mỗi request là của bạn
Proxy IPv4 riêng ở 7 nước và proxy ISP tĩnh ở Việt Nam, Mỹ. Mỗi IP chỉ cấp cho một khách, không giới hạn băng thông, hỗ trợ ticket 24/7.
Xem bảng giá