Python urllib: isključite proksije za jedan opener
Napravite urllib opener za direktno povezivanje pomoću ProxyHandler({}), bez mijenjanja drugih klijenata i okruženja procesa.
Proslijedite prazno mapiranje u ProxyHandler kada jedan urllib opener treba da se povezuje direktno:
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 proksi putanje. Izostavljanje mapiranja omogućava rukovaocu da otkrije proksije iz okruženja i postavki platforme. Ova dva načina stvaranja izražavaju različite politike.
Primjer koristi standardnu biblioteku Pythona i zadržava normalnu HTTPS provjeru. Blok with zatvara odgovor, uključujući izlazak iz bloka zbog izuzetka.
Direktni zahtjevi i zahtjevi preko proksija 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 proksijem ili izaberite kandidata s liste HTTP proxyja za poređenje putem proksija. On može prenijeti vezu do HTTPS odredišta preko CONNECT-a ako servis to dopušta. Protokol i podrška za autentifikaciju osluškujućeg servisa moraju odgovarati rukovaocu.
Ne dirajte podrazumijevani opener
Pozivajte direct.open ili proxied.open preko objekta odgovornog za putanju. install_opener mijenja podrazumijevani objekat za cijeli proces koji koriste pomoćne funkcije urllib-a; biblioteka koja ga koristi zato može uticati na nepovezan kod. Nije potreban za izdvojeni opener iznad.
Argument timeout je postavka operacije, a ne potpuno ograničenje stvarnog proteklog vremena svakog prijenosa. Čitajte samo potrebne podatke i koristite rok višeg nivoa ako zadatak ima strogo ukupno vremensko ograničenje.
Ovi opener objekti ne mijenjaju klijenta druge biblioteke, postojeći proces ili postavke proksija u pregledniku.