ส่งแมปว่างให้ ProxyHandler เมื่อ urllib opener ตัวหนึ่งควรเชื่อมต่อโดยตรง:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))

with direct.open("https://example.com/", timeout=10) as response:
    print(response.status)

ดิกชันนารีว่างไม่ระบุเส้นทางพร็อกซีใดเลย แต่หากไม่ส่งแมป ตัวจัดการจะค้นหาพร็อกซีจากสภาพแวดล้อมและการตั้งค่าแพลตฟอร์มแทน การสร้างสองแบบนี้แสดงนโยบายที่ต่างกัน

ตัวอย่างใช้ไลบรารีมาตรฐานของ Python และคงการตรวจสอบ HTTPS ตามปกติ บล็อก with ปิดการตอบกลับ รวมถึงเมื่อออกจากบล็อกเพราะข้อยกเว้น

คำขอโดยตรงและผ่านพร็อกซีในแอปเดียวกัน

opener สองตัวรองรับนโยบายสองแบบได้โดยไม่ต้องเปลี่ยนตัวแปรสภาพแวดล้อมระหว่างการเรียก:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))
proxied = build_opener(ProxyHandler({
    "http": "http://127.0.0.1:8080",
    "https": "http://127.0.0.1:8080",
}))

with proxied.open("https://example.com/", timeout=10) as response:
    print(response.status)

แทนที่ที่อยู่ loopback ด้วยพร็อกซี HTTP ของคุณ หรือเลือกจากรายการพร็อกซี HTTPเพื่อเปรียบเทียบการเชื่อมต่อผ่านพร็อกซี โดยสามารถส่งต่อการเชื่อมต่อไปยังเป้าหมาย HTTPS ผ่าน CONNECT ได้เมื่อบริการอนุญาต โปรโตคอลและการรองรับการยืนยันตัวตนของตัวรับฟังต้องตรงกับตัวจัดการ

คง opener เริ่มต้นไว้

เรียก direct.open หรือ proxied.open ผ่านออบเจ็กต์ที่รับผิดชอบเส้นทาง install_opener เปลี่ยนค่าเริ่มต้นของทั้งกระบวนการที่ฟังก์ชันอำนวยความสะดวกของ urllib ใช้ ดังนั้นไลบรารีที่ใช้มันอาจกระทบโค้ดส่วนอื่นที่ไม่เกี่ยวข้อง ไม่จำเป็นต้องใช้กับ opener ที่แยกไว้ข้างต้น

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

ออบเจ็กต์ opener เหล่านี้ไม่เปลี่ยนไคลเอนต์ของไลบรารีอื่น กระบวนการที่มีอยู่ หรือการตั้งค่าพร็อกซีของเบราว์เซอร์

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