คำตอบด่วน
Read timed out (ReadTimeout) หมายความว่าอย่างไรกับพร็อกซี?
Read timed out หมายถึงไคลเอนต์ของคุณรอนานกว่าการตั้งเวลาหมดเวลาการอ่านสำหรับไบต์ถัดไปของคำตอบ ผ่าน residential proxy ของ CrawlRelay โดยปกติความล่าช้ามาจากเป้าหมายช้า หรือการเชื่อมต่อออกบ้านที่ช้า กำหนดเวลาหมดเวลาการเชื่อมต่อและอ่านแยกกัน ประมาณ 10 และ 30 ถึง 60 วินาทีสำหรับหน้า HTML และลองใหม่หนึ่งครั้งเมื่อหมดเวลาโดยใช้ exit ใหม่
Read timed out (ReadTimeout) แบบสั้นๆ
| ข้อผิดพลาด | Read timed out (ReadTimeout) |
|---|---|
| ประเภท | ไคลเอนต์หมดเวลารอ |
| ส่งโดย | HTTP client ของคุณ เมื่อไม่มีข้อมูลมาถึงภายในเวลาที่กำหนดสำหรับอ่านข้อมูล |
| กำหนดไว้ใน | Client setting, no protocol status |
| ลองใหม่อีกครั้งไหม? | ใช่ ครั้งหรือสองครั้งกับ exit ใหม่ |
| ตรวจสอบก่อน | เปรียบเทียบเวลาหมดเวลาการอ่านกับเวลาตอบสนองปกติของเป้าหมาย |
Read timed out (ReadTimeout) หมายความว่าอย่างไร?
ไคลเอนต์มักมีตัวจับเวลาสองตัว connect timeout จำกัดเวลารอเปิดการเชื่อมต่อกับ proxy และ read timeout จำกัดเวลารอระหว่างไบต์หลังส่งคำขอแล้ว ดังนั้น read timeout หมายความว่าเชื่อมต่อสำเร็จแต่คำตอบช้า
ถ้าไม่ตั้งเวลาไว้ บางไคลเอนต์จะรอตลอดไป ใน requests ของ Python ไม่มีค่า timeout เริ่มต้น เลยอาจทำให้คำขอติดค้างจนกระทั่งกระบวนการหยุดตอบสนอง
a read timeout เป็นอย่างไรใน Python, curl, Node.js และเบราว์เซอร์?
ข้อผิดพลาดเดียวกันนี้แสดงผลแตกต่างกันในแต่ละเครื่องมือ นี่คือข้อความที่ต้องค้นหาในบันทึกของคุณ:
- Python requests:
ReadTimeout: HTTPSConnectionPool(...): Read timed out. (read timeout=10) - httpx:
httpx.ReadTimeout - Node.js:
ETIMEDOUT,ESOCKETTIMEDOUT, หรือAbortErrorจากตัวจับเวลาของคุณ - Playwright:
TimeoutError: page.goto: Timeout 30000ms exceeded
อะไรเป็นสาเหตุของ a read timeout?
โอกาสสูงสุดอันดับแรก:
- หน้าเป้าหมายที่ช้า เช่น ผลการค้นหาหรือหน้าที่มีไดนามิกหนัก
- การเชื่อมต่อออกที่ช้า: ความเร็วอัพโหลดบ้าน, Wi-Fi หรือเซลล์มือถือที่แออัด
- ดาวน์โหลดขนาดใหญ่ ที่อ่านเต็มหน่วยความจำในทีเดียวแทนการสตรีม
- ตั้งเวลาหมดเวลาสั้นเกินไป สำหรับประเภทหน้า
- หน้าเบราว์เซอร์ ที่รอ network idle บนเว็บไซต์ที่โหลดทรัคเกอร์ตลอดเวลา
ฉันวินิจฉัย a read timeout ทีละขั้นตอนอย่างไร?
- วัดเวลาคำขอโดยไม่มี proxy เพื่อเป็นข้อมูลพื้นฐาน
- บันทึกเวลาได้ไบต์แรกและเวลาทั้งหมดแยกกัน
- ตรวจสอบขนาดตอบสนองสำหรับ URL ที่ช้า
- ในเบราว์เซอร์ ตรวจสอบเงื่อนไข
waitUntilที่คุณใช้
# 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ฉันจะแก้ไข a read timeout อย่างไร?
- ตั้งเวลาทั้งสองตัว: connect ประมาณ 10 วินาที, read 30 ถึง 60 วินาทีสำหรับ HTML, มากกว่านั้นสำหรับไฟล์ใหญ่
- สตรีมข้อมูลใหญ่ และเขียนเป็นชิ้นลงดิสก์
- ใช้
domcontentloadedแทน network idle ใน Playwright เมื่อคุณต้องการแค่ HTML - บล็อกทรัพยากรหนัก ที่ไม่จำเป็นในเบราว์เซอร์ เช่น วิดีโอ
- ลองใหม่บน exit ใหม่ครั้งหนึ่ง แล้วโยก URL ไปคิวช้า
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...ฉันควรลองใหม่หลังจาก a read timeout ไหม?
ลองใหม่ read timeout หนึ่งหรือสองครั้งบน exit ใหม่ หาก URL เดิมหมดเวลาบ่อย ให้ตั้งเวลาหมดเวลานานขึ้นโดยแยกเข้าคิวช้าแทนการเพิ่มเวลาหมดเวลาทั้งหมด ระวังผลกระทบข้างเคียงจากคำขอซ้ำ ให้ retry เฉพาะคำขอที่ปลอดภัยที่จะส่งซ้ำ เช่น GET
Read timed out (ReadTimeout) มีผลอย่างไรกับ CrawlRelay?
การเชื่อมต่อ CrawlRelay ใหม่โดยไม่มี session ID จะใช้ residential exit ที่แตกต่างกัน ดังนั้นการลองใหม่จะทดสอบการเชื่อมต่อบ้านที่แตกต่างกันด้วย เก็บ session ที่ติดอยู่ (sticky sessions) ให้สั้นสำหรับเป้าหมายที่ช้า: ถ้า exit ช้า คำขอทุกคำใน session จะช้าไปด้วย
เกตเวย์: gw.crawlrelay.com, พอร์ต 7777 (HTTP, HTTPS ผ่าน CONNECT) และพอร์ต 7778 (SOCKS5). รูปแบบชื่อผู้ใช้: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. ที่เกี่ยวข้อง: 504 Gateway Timeout · Connection reset · Concurrency guide.
Read timed out (ReadTimeout): คำถามที่นักพัฒนาถาม
ควรตั้งเวลาหมดเวลาเท่าไรสำหรับสแครปโดยใช้ proxy?
เริ่มต้นที่ประมาณ 10 วินาทีสำหรับการเชื่อมต่อและ 30 วินาทีสำหรับการอ่านข้อมูลบนหน้า HTML แล้วปรับตามการวัดของคุณ JSON API มักเร็วกว่า หน้าไฟล์ใหญ่และหน้าการค้นหาช้าต้องเพิ่มเวลา ตั้งเวลาหมดเวลาชัดเจน: Python requests ไม่มีค่า timeout เริ่มต้น
เวลาหมดเวลาส่งผลต่อปริมาณทราฟฟิกไหม?
เฉพาะข้อมูลไบต์ที่ส่งก่อนเวลาหมดเวลาเท่านั้น คำขอที่หมดเวลาระหว่างรอไบต์แรกแทบไม่ได้ย้ายข้อมูลเลย โหลดไฟล์ใหญ่ที่หมดเวลาไปกลางทางย่อมย้ายข้อมูลบางส่วนได้ สตรีมไฟล์ใหญ่และต่อจากตำแหน่งที่ถูกหยุดได้ถ้าเป็นไปได้
ทำไมเวลาหมดเวลามักเกิดเป็นช่วง?
บ่อยครั้งเนื่องจากเป้าหมายทำงานช้าลงเมื่อมีโหลด บางครั้งเป็นเพราะโหลดของคุณเอง การเกิดขึ้นพร้อมกันหลายจุดออก (exits) ชี้ไปที่เป้าหมาย; เวลาไทม์เอาต์เดี่ยว ๆ ชี้ไปที่จุดออกช้าเพียงจุดเดียว ลดความพร้อมทำงานพร้อมกันบนโฮสต์เมื่อตอนที่เกิดโหลดขึ้นพร้อมกัน
ข้อผิดพลาดพร็อกซีอื่นๆ ในเอกสารอ้างอิงนี้
รหัสสถานะ HTTP
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
ข้อผิดพลาดของเบราว์เซอร์และไคลเอนต์
ข้อผิดพลาดการเชื่อมต่อและ TLS
พร็อกซีเรซิเดนเชียลที่มีเอกสารอธิบายกรณีล้มเหลว
พร็อกซีเรซิเดนเชียล CrawlRelay จาก US$0.50/GB, ปริมาณข้อมูลที่ไม่หมดอายุ