หลีกเลี่ยงการเปลี่ยน urllib opener ทั้งกระบวนการในตัวตรวจสอบพร็อกซี
เก็บการตรวจสอบพร็อกซีด้วย urllib ไว้ใน opener ของตัวเอง แทนการแทนที่การกำหนดเส้นทางและเวลาหมดอายุเริ่มต้นของทั้งกระบวนการ
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 ทั้งกระบวนการแยกออกจากกัน
การตรวจสอบควรคืนค่าการสังเกตของตนโดยไม่ทิ้งนโยบายเครือข่ายอื่นไว้ข้างหลัง วัตถุไคลเอนต์ของตัวเองและการดำเนินการที่มีขอบเขตทำให้ขอบเขตนั้นชัดเจน