Python urllib: รวมการกำหนดเส้นทางผ่าน proxy กับการ Basic Authentication ของเว็บไซต์
รวมการกำหนดเส้นทาง urllib และ Basic authentication ของปลายทางไว้ใน opener เดียวอย่างชัดเจน โดยไม่ต้องแทนที่ opener ส่วนกลางสองครั้ง
การเรียก install_opener() สองครั้งไม่ได้เพิ่ม opener ที่สองเข้าไปในตัวแรก แต่จะแทนที่ opener เริ่มต้นของ module หากออบเจ็กต์หนึ่งรู้จัก proxy และอีกตัวรู้จักการเข้าสู่ระบบของเว็บไซต์ ให้สร้าง opener เดียวที่มี handlers ที่จำเป็น
import os
from urllib.request import (ProxyHandler, HTTPBasicAuthHandler,
HTTPPasswordMgrWithDefaultRealm, build_opener)
passwords = HTTPPasswordMgrWithDefaultRealm()
passwords.add_password(None, 'https://example.com/private/',
os.environ['SITE_USER'], os.environ['SITE_PASSWORD'])
opener = build_opener(
ProxyHandler({'https': 'http://203.0.113.10:8080'}),
HTTPBasicAuthHandler(passwords),
)
with opener.open('https://example.com/private/report', timeout=10) as response:
body = response.read()proxy และปลายทางเป็นเพียงตัวอย่าง สำหรับบริการสาธารณะที่เข้าถึงได้ผ่าน HTTP proxy สาธารณะ รายการ proxy HTTP มี endpoints ที่เป็นตัวเลือกสำหรับ handler การกำหนดเส้นทาง opener นี้ส่งคำขอ HTTPS ผ่าน HTTP proxy และจัดการการท้าทาย Basic ของปลายทาง ไม่ได้กำหนดค่าการรับรองความถูกต้องของ proxy
หาก proxy ต้องการการเข้าสู่ระบบด้วย ให้เลือกการตั้งค่าการรับรองความถูกต้องของ proxy ที่รองรับแยกต่างหาก 407 ณ เวลา CONNECT เกิดขึ้นก่อนที่ปลายทางจะสามารถออกการท้าทายของตนเองได้ การเพิ่มข้อมูลรับรองของเว็บไซต์ลงในตัวจัดการรหัสผ่านไม่สามารถตอบสนองการแลกเปลี่ยนก่อนหน้านั้นได้
การเรียก opener.open() โดยตรงจะเก็บ การกำหนดค่าไว้กับการดำเนินการ ไม่จำเป็นต้องเปลี่ยนค่าเริ่มต้นทั้ง module เว้นแต่แอปพลิเคชันต้องการให้การเรียกที่สะดวกทั้งหมดใช้ opener นี้ร่วมกันโดยเจตนา