สำหรับตรวจพร็อกซี 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

บทความที่เกี่ยวข้อง