Python urllib: isključite proxyje za jedan opener
Stvorite urllib opener za izravno povezivanje pomoću ProxyHandler({}), bez promjena drugih klijenata i okruženja procesa.
Proslijedite prazno mapiranje u ProxyHandler kada se jedan urllib opener treba povezivati izravno:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
with direct.open("https://example.com/", timeout=10) as response:
print(response.status)
Prazan rječnik ne daje proxy rute. Izostavljanje mapiranja omogućuje rukovatelju da otkrije proxyje iz okruženja i postavki platforme. Ova dva načina stvaranja izražavaju različite politike.
Primjer koristi standardnu biblioteku Pythona i zadržava uobičajenu HTTPS provjeru. Blok with zatvara odgovor, uključujući izlazak iz bloka zbog iznimke.
Izravni zahtjevi i zahtjevi putem proxyja u istoj aplikaciji
Dva opener objekta mogu nositi dvije politike bez mijenjanja varijabli okruženja između poziva:
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)
Zamijenite adresu povratne petlje svojim HTTP proxyjem ili odaberite kandidata s popisa HTTP proxyja za usporedbu putem proxyja. On može prenijeti vezu do HTTPS odredišta putem CONNECT-a ako servis to dopušta. Protokol i podrška za autentifikaciju slušatelja moraju odgovarati rukovatelju.
Ne mijenjajte zadani opener
Pozivajte direct.open ili proxied.open putem objekta odgovornog za rutu. install_opener mijenja zadani objekt za cijeli proces koji koriste pomoćne funkcije urllib-a; biblioteka koja ga koristi stoga može utjecati na nepovezan kod. Nije potreban za izdvojeni opener iznad.
Argument timeout postavka je operacije, a ne potpuno ograničenje stvarnog proteklog vremena svakog prijenosa. Čitajte samo podatke potrebne zadatku i koristite rok više razine ako zadatak ima strogo ukupno vremensko ograničenje.
Ovi opener objekti ne mijenjaju klijenta druge biblioteke, postojeći proces ni postavke proxyja u pregledniku.