from urllib.request import ProxyHandler, build_opener

def make_proxy_opener(proxy_uri):
    return build_opener(ProxyHandler({
        "http": proxy_uri,
        "https": proxy_uri,
    }))

opener = make_proxy_opener("http://proxy.example.net:8080")
# Use opener.open(destination, timeout=10) for this route.

เรียกเมธอด open ของ opener นี้เองเมื่อเส้นทางเป็นของการตรวจสอบ ปลายทาง HTTP ในตัวอย่างอาจมาจากบริการของคุณหรือจากรายการพร็อกซี HTTP สำหรับการตรวจสอบสาธารณะ ตัวอย่างนี้แสดงความเป็นเจ้าของ ไม่ได้กำหนดนโยบายการรับรองความถูกต้องหรือสุขภาพทั้งหมด ให้ตัวจัดการเฉพาะบัญชีใด ๆ เชื่อมอยู่กับไคลเอนต์ที่ตั้งใจไว้

urllib.request.install_opener() เปลี่ยนค่าเริ่มต้นทั้งกระบวนการที่การเรียก urlopen() ระดับโมดูลในภายหลังใช้ ดังนั้นตัวตรวจสอบที่วนผ่านพร็อกซีอาจปล่อยให้คำขอที่ไม่เกี่ยวข้องใช้ปลายทางสุดท้ายของตน การติดตั้งชั่วคราวและการคืนค่าเมื่อล้างยังคงอนุญาตให้คำขอพร้อมกันทำงานระหว่างการเปลี่ยนแปลงที่ใช้ร่วมกัน

socket.setdefaulttimeout() เปลี่ยนค่าเริ่มต้นสำหรับ socket ที่สร้างขึ้นภายหลังในทำนองเดียวกัน ใช้เวลาหมดอายุระดับการดำเนินการเมื่อมีเพียงการตรวจสอบเท่านั้นที่ควรได้รับ

ปิดการตอบกลับของการตรวจสอบและเก็บผลลัพธ์ให้เจาะจง การตอบกลับข้อผิดพลาด HTTP ไม่ใช่ผู้รับฟังพร็อกซีที่ตายแล้วโดยอัตโนมัติ หากใช้การตรวจสอบ urllib แบบ synchronous ในบริการ async ให้ย้ายงานที่บล็อกไปยัง worker ที่เหมาะสม การตัดสินใจดำเนินการนั้นไม่ได้ทำให้การเปลี่ยน opener ทั้งกระบวนการแยกออกจากกัน

การตรวจสอบควรคืนค่าการสังเกตของตนโดยไม่ทิ้งนโยบายเครือข่ายอื่นไว้ข้างหลัง วัตถุไคลเอนต์ของตัวเองและการดำเนินการที่มีขอบเขตทำให้ขอบเขตนั้นชัดเจน

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