Python urllib: การพิสูจน์ตัวตน Basic ของพร็อกซีสำหรับคำขอ HTTP
สร้าง urllib opener ที่ชัดเจนสำหรับการท้าทาย Basic จากพร็อกซี HTTP และแยกการแลกเปลี่ยน HTTP ปกตินี้ออกจากการพิสูจน์ตัวตน HTTPS CONNECT
สำหรับการท้าทาย Basic จากพร็อกซี HTTP ให้ใช้ ProxyBasicAuthHandler ตัวอย่าง HTTP ปกตินี้เก็บเส้นทางและบัญชีไว้ใน opener เดียว:
import os
from urllib.request import (
ProxyHandler, ProxyBasicAuthHandler,
HTTPPasswordMgrWithDefaultRealm, build_opener,
)
proxy_url = 'http://proxy.example:8080'
passwords = HTTPPasswordMgrWithDefaultRealm()
passwords.add_password(
None, proxy_url,
os.environ['PROXY_USER'], os.environ['PROXY_PASSWORD'],
)
opener = build_opener(
ProxyHandler({'http': proxy_url}),
ProxyBasicAuthHandler(passwords),
)
with opener.open('http://example.com/', timeout=10) as response:
print(response.status)ใช้ปลายทางจริงและบัญชีที่ผู้ให้บริการมอบให้ ตัวจัดการ ใช้ตัวจัดการรหัสผ่านสำหรับการท้าทายของพร็อกซี จับคู่ URI และ realm ของพร็อกซีที่ต้องการ การพิสูจน์ตัวตน Basic ที่ปลายทางใช้ตัวจัดการอื่น
การเรียก opener โดยตรงทำให้การตั้งค่านี้อยู่ภายในเครื่อง URL ของคำขอยังคงเป็นเว็บไซต์ ไม่ใช่ตัวกลาง เส้นทาง HTTP แบบเปิดนี้ไม่ได้เข้ารหัสการแลกเปลี่ยน Basic
อย่าสรุปจากการท้าทายนี้ว่ามีการรองรับอุโมงค์ HTTPS 407 ระหว่าง CONNECT เกิดขึ้นตอนตั้งค่า ก่อนการตอบกลับปกติจากปลายทาง การเชื่อมต่อที่เลือกต้องจัดการการพิสูจน์ตัวตนตรงนั้น การเปลี่ยนตัวจัดการเข้าสู่ระบบของเว็บไซต์ไม่สามารถแก้การท้าทายก่อนหน้านั้นได้
URL พร็อกซีที่มีข้อมูลรับรองเป็นอีกรูปแบบหนึ่งที่พบในตัวอย่างเก่า หากใช้ ให้เข้ารหัสตัวคั่น URL อย่างถูกต้องและเก็บ URL ที่มีความลับไว้นอกบันทึก