ใช้ IP พร็อกซีกับ urllib3
เลือก ProxyManager สำหรับพร็อกซี HTTP ตรวจฟิลด์คำตอบของ urllib3 และคำนึงถึงการลองใหม่กับตัวจัดการ SOCKS ที่แยกกัน
สำหรับตรวจพร็อกซี urllib3 แบบสั้น ให้ใช้ ProxyManager โดยปิดการลองใหม่ วิธีนี้รายงานความพยายามแรก แทนการเสียเวลาลองรายการที่ไม่ทำงานซ้ำ ในโปรเจกต์ที่จัดการด้วย uv:
uv add urllib3แทนปลายทางตัวอย่างในเอกสารด้วยพร็อกซี HTTP จากบริการของคุณหรือรายการพร็อกซี HTTP แล้วส่งคำขอผ่านตัวจัดการนั้น:
import urllib3
proxy = urllib3.ProxyManager(
"http://203.0.113.10:8080",
timeout=urllib3.Timeout(connect=5, read=10),
retries=False,
)
try:
response = proxy.request("GET", "https://example.com/")
print(response.status)
print(response.data.decode("utf-8", errors="replace")[:200])
finally:
proxy.clear()
อ่าน response.status ก่อน แล้วตรวจ response.data นี่คือฟิลด์ของ urllib3 ส่วน status_code และ text แบบ Requests ไม่ใช่ตัวแทนกัน การปฏิเสธจากเว็บไซต์อาจส่งผ่านพร็อกซีที่ทำงานได้ แต่ข้อยกเว้นก่อนมีคำตอบแสดงว่าคำขอไม่สำเร็จครบถ้วน
retries=False เป็นทางเลือกเพื่อวินิจฉัย ไม่ใช่นโยบายลองใหม่สำหรับใช้งานจริง การตั้งเชื่อมต่อ 5 วินาทีและอ่าน 10 วินาทีจำกัดแต่ละช่วง ไม่ได้รวมเป็นเวลาทั้งหมด 15 วินาทีที่รับประกัน DNS และความคืบหน้าของคำตอบอาจกระทบเวลารวม
ตัวอย่างโหลดเนื้อหาล่วงหน้าและล้างพูลของตัวจัดการตอนจบ สำหรับคำขอซ้ำผ่านปลายทางเดิม ให้เก็บตัวจัดการไว้จนจบงานเพื่อใช้การเชื่อมต่อซ้ำ การเปลี่ยนไปใช้ preload_content=False เปลี่ยนวงจรชีวิต ผู้เรียกต้องอ่านและคืนทรัพยากรของคำตอบแบบสตรีม
เลือกตัวจัดการให้ตรงกับบริการที่ฟังอยู่ PoolManager ปกติไม่รู้จักพร็อกซีเพียงเพราะเก็บ URL ไว้ที่อื่น SOCKS ใช้ urllib3.contrib.socks.SOCKSProxyManager และการพึ่งพาเสริมของมัน โค้ดด้านบนใช้เส้นทาง HTTP ProxyManager