Trả lời nhanh
Read timed out (ReadTimeout) nghĩa là gì với proxy?
Hết giờ đọc nghĩa là client của bạn chờ lâu hơn thời gian quy định để nhận byte tiếp theo của phản hồi. Qua proxy residential của CrawlRelay, nguyên nhân thường là trang đích tải chậm hoặc kết nối nhà chậm. Thiết lập thời gian kết nối và đọc riêng biệt, khoảng 10 giây kết nối và 30-60 giây đọc cho trang HTML, và thử lại yêu cầu hết giờ một lần trên exit mới.
Read timed out (ReadTimeout) nhìn nhanh
| Lỗi | Read timed out (ReadTimeout) |
|---|---|
| Loại | Lỗi hết giờ client |
| Gửi bởi | Client HTTP của bạn khi không nhận dữ liệu trong thời gian đọc cho phép |
| Định nghĩa tại | Client setting, no protocol status |
| Thử lại? | Có, một hoặc hai lần trên một exit mới |
| Kiểm tra trước tiên | So sánh thời gian đọc tối đa với thời gian phản hồi bình thường của đích |
Read timed out (ReadTimeout) nghĩa là gì?
Client thường có hai bộ đếm thời gian. Thời gian kết nối giới hạn chờ mở kết nối đến proxy. Thời gian đọc giới hạn chờ giữa các byte sau khi gửi yêu cầu. Hết giờ đọc nghĩa là kết nối đã thành công nhưng phản hồi quá chậm.
Nếu không đặt giới hạn rõ ràng, một số client sẽ chờ vô hạn. Trong Python requests, mặc định không có timeout, nên một yêu cầu dừng có thể làm tắc worker.
a read timeout 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:
ReadTimeout: HTTPSConnectionPool(...): Read timed out. (read timeout=10) - httpx:
httpx.ReadTimeout - Node.js:
ETIMEDOUT,ESOCKETTIMEDOUT, hoặcAbortErrordo bộ đếm riêng - Playwright:
TimeoutError: page.goto: Timeout 30000ms exceeded
Nguyên nhân gây ra a read timeout là gì?
Khả năng đầu tiên là:
- Trang đích tải chậm, ví dụ trang kết quả tìm kiếm hoặc trang động nặng.
- Exit chậm: tốc độ upload tại nhà, Wi-Fi hoặc cột di động đông.
- Tải xuống lớn đọc một lần thay vì theo luồng.
- Thời gian chờ đặt quá chặt so với loại trang.
- Trang trình duyệt chờ mạng yên lặng trên trang có tracker chạy liên tục.
Làm sao để chẩn đoán a read timeout từng bước?
- Đo thời gian yêu cầu không qua proxy để có chuẩn.
- Ghi log thời gian byte đầu tiên và tổng thời gian riêng biệt.
- Kiểm tra cỡ phản hồi của URL chậm.
- Trên trình duyệt, kiểm tra điều kiện
waitUntilbạn sử dụng.
# 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 read timeout?
- Đặt thời gian chờ cả hai: khoảng 10 giây kết nối, 30-60 giây đọc cho HTML, lâu hơn cho file lớn.
- Phân luồng phản hồi lớn và ghi lên đĩa từng phần.
- Dùng
domcontentloadedthay vì mạng yên lặng trong Playwright khi chỉ cần HTML. - Chặn tài nguyên nặng không cần thiết trên trình duyệt như video.
- Thử lại một lần trên exit mới, rồi chuyển URL sang hàng đợi chậm.
import httpx
proxy = "http://USERNAME:[email protected]:7777"
timeout = httpx.Timeout(connect=10.0, read=30.0, write=10.0, pool=10.0)
with httpx.Client(proxy=proxy, timeout=timeout) as client:
try:
r = client.get("https://api.ipify.org")
print(r.status_code, r.text)
except httpx.TimeoutException as exc:
print("timed out:", type(exc).__name__) # ConnectTimeout, ReadTimeout...Có nên thử lại sau a read timeout không?
Thử lại hết giờ đọc một hoặc hai lần trên exit mới. Nếu URL đó vẫn hết giờ, cho nó thời gian chờ dài hơn trong hàng đợi chậm thay vì tăng thời gian chờ chung cho tất cả. Chỉ thử lại các yêu cầu an toàn, ví dụ GET, để tránh tác dụng phụ.
Read timed out (ReadTimeout) áp dụng thế nào với CrawlRelay?
Mỗi kết nối CrawlRelay mới mà không có session ID dùng exit residential khác nên thử lại cũng là thử kết nối nhà khác. Giữ phiên ngắn với đích chậm: nếu exit chậm, mọi yêu cầu trong phiên đều chậm.
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: 504 Gateway Timeout · Connection reset · Concurrency guide.
Read timed out (ReadTimeout): các câu hỏi thường gặp của lập trình viên
Nên dùng thời gian chờ nào khi quét có proxy?
Bắt đầu với khoảng 10 giây kết nối và 30 giây đọc cho trang HTML, rồi điều chỉnh theo đo đạc của bạn. API JSON thường nhanh hơn; file lớn và trang tìm kiếm chậm cần lâu hơn. Luôn đặt thời gian chờ rõ ràng: Python requests mặc định không có.
Hết giờ chờ có làm tốn băng thông không?
Chỉ tính cho số byte đã truyền trước khi hết giờ. Yêu cầu hết giờ chờ byte đầu tiên gần như không truyền gì. Tải xuống lớn hết giờ giữa chừng thì đã truyền dữ liệu. Phân luồng file lớn và tiếp tục tải khi có thể.
Tại sao hết giờ chờ xảy ra theo đợt?
Thường là do đích chậm lại khi tải cao, đôi khi do tải của chính bạn. Các đợt bùng phát trên nhiều exit cùng lúc nhắm đến đích; timeout riêng lẻ chỉ ra các exit chậm đơn lẻ. Giảm độ đồng thời trên host khi một đợt bùng phát bắt đầu.
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.