Python urllib: нэг opener-ийн проксиг идэвхгүй болгох
ProxyHandler({}) ашиглан шууд холбогдох urllib opener үүсгэж, бусад клиент болон процессын орчныг хэвээр үлдээнэ.
Нэг urllib opener шууд холбогдох ёстой бол ProxyHandler-д хоосон дүрслэл дамжуулна:
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)
Буцах холболтын хаягийг өөрийн HTTP проксигоор солино, эсвэл проксигоор харьцуулах нэр дэвшигчийг HTTP проксийн жагсаалтаас сонгоно. Үйлчилгээ зөвшөөрвөл HTTPS зорилтот серверийн холболтыг CONNECT-ээр дамжуулж болно. Сонсож буй үйлчилгээний протокол болон таних баталгаажуулалтын дэмжлэг нь боловсруулагчтай тохирох ёстой.
Үндсэн opener-ийг өөрчлөхгүй үлдээ
Тухайн замыг хариуцсан объектоор direct.open эсвэл proxied.open-ийг дуудна. install_opener нь urllib-ийн хялбарчилсан дуудлагуудын ашигладаг процесс даяарх үндсэн объектыг өөрчилдөг тул үүнийг хэрэглэсэн сан хамааралгүй кодод нөлөөлж болно. Дээрх тусгаарласан opener-т энэ хэрэггүй.
timeout аргумент нь нэг үйлдлийн тохиргоо болохоос дамжуулалт бүрийн нийт бодит хугацааны эцсийн хязгаар биш. Зөвхөн ажилд хэрэгтэй өгөгдлийг уншиж, нийт хугацааны хатуу төсөвтэй бол дээд түвшний хугацааны хязгаар ашиглана.
Эдгээр opener объект бусад сангийн клиент, байгаа процесс эсвэл хөтчийн прокси тохиргоог өөрчлөхгүй.