Python urllib: proxyk kikapcsolása egyetlen openerhez
Hozzon létre közvetlenül kapcsolódó urllib-openert a ProxyHandler({}) segítségével a többi kliens és a folyamat környezetének módosítása nélkül.
Adjon át üres leképezést a ProxyHandlernek, ha egyetlen urllib-openernek közvetlenül kell kapcsolódnia:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
with direct.open("https://example.com/", timeout=10) as response:
print(response.status)
Az üres szótár nem ad meg proxyútvonalakat. A leképezés elhagyásakor viszont a kezelő a környezetből és a platform beállításaiból deríti fel a proxykat. Ez a két létrehozási mód eltérő irányelveket fejez ki.
A példa a Python standard könyvtárát használja, és megtartja a szokásos HTTPS-ellenőrzést. A with blokk lezárja a választ, akkor is, ha kivétel miatt kell kilépni a blokkból.
Közvetlen és proxyn átmenő kérések ugyanabban az alkalmazásban
Két opener hordozhatja a két irányelvet anélkül, hogy a hívások között környezeti változókat módosítana:
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)
Cserélje le a visszacsatolási címet saját HTTP-proxyjára, vagy válasszon jelöltet a HTTP-proxyk listájáról a proxys összehasonlításhoz. A HTTPS-cél kapcsolata CONNECT segítségével továbbítható, ha a szolgáltatás engedi. A figyelő szolgáltatás protokolljának és hitelesítési támogatásának illeszkednie kell a kezelőhöz.
Hagyja érintetlenül az alapértelmezett openert
A direct.open vagy proxied.open hívást az útvonalért felelős objektumon végezze. Az install_opener módosítja a folyamat egészének alapértelmezését, amelyet az urllib kényelmi függvényei használnak; az ezt használó könyvtár így más kódra is hatással lehet. A fenti elkülönített openerhez nincs rá szükség.
A timeout argumentum egy művelet beállítása, nem az egyes átvitelek teljes valós idejű határideje. Csak a szükséges adatokat olvassa be, és használjon magasabb szintű határidőt, ha a feladatnak szigorú teljes időkerete van.
Ezek az opener objektumok nem változtatják meg más könyvtár kliensét, egy meglévő folyamatot vagy a böngésző proxybeállításait.