Python urllib: Slå av proxyer for én opener
Lag en urllib-opener med direkte forbindelse via ProxyHandler({}), uten å endre andre klienter eller prosessmiljøet.
Gi ProxyHandler en tom mapping når én urllib-opener skal koble til direkte:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
with direct.open("https://example.com/", timeout=10) as response:
print(response.status)
Den tomme ordboken angir ingen proxyruter. Utelater du mappingen, oppdager handleren i stedet proxyer fra miljøet og plattforminnstillingene. Disse to konstruksjonene uttrykker ulike retningslinjer.
Eksemplet bruker Pythons standardbibliotek og beholder normal HTTPS-verifisering. with-blokken lukker svaret, også når et unntak fører til at blokken forlates.
Direkte forespørsler og forespørsler via proxy i samme applikasjon
To openere kan ha hver sin retningslinje uten å endre miljøvariabler mellom kall:
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)
Bytt ut loopback-adressen med din HTTP-proxy, eller velg en kandidat fra listen over HTTP-proxyer til sammenligningen via proxy. Den kan føre forbindelsen til HTTPS-målet gjennom CONNECT når tjenesten tillater det. Lyttepunktets protokoll og støtte for autentisering må passe til handleren.
La standardopeneren være
Kall direct.open eller proxied.open gjennom objektet som har ansvaret for ruten. install_opener endrer den prosessomfattende standarden som urllibs hjelpefunksjoner bruker; et bibliotek som bruker den, kan derfor påvirke uvedkommende kode. Den er unødvendig for den isolerte openeren ovenfor.
Argumentet timeout er en innstilling for en operasjon, ikke en fullstendig frist målt i faktisk tid for hver overføring. Les bare nødvendige data, og bruk en frist på et høyere nivå hvis oppgaven har et strengt samlet tidsbudsjett.
Disse opener-objektene endrer ikke klienten til et annet bibliotek, en eksisterende prosess eller en nettlesers proxyinnstillinger.