Podajte prazno preslikavo v ProxyHandler, kadar se mora en urllib opener povezovati neposredno:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))

with direct.open("https://example.com/", timeout=10) as response:
    print(response.status)

Prazen slovar ne določa poti prek posrednikov. Če preslikavo izpustite, obdelovalnik poišče posrednike iz okolja in nastavitev platforme. Ta načina ustvarjanja izražata različni politiki.

Primer uporablja standardno knjižnico Pythona in ohrani običajno preverjanje HTTPS. Blok with zapre odgovor, tudi če se blok zapusti zaradi izjeme.

Neposredne zahteve in zahteve prek posrednika v isti aplikaciji

Dva objekta opener lahko nosita obe politiki brez spreminjanja spremenljivk okolja med klici:

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)

Naslov povratne zanke zamenjajte s svojim posrednikom HTTP ali izberite kandidata s seznama proxyjev HTTP za primerjavo prek posrednika. Povezavo do cilja HTTPS lahko prenese prek CONNECT, če storitev to dovoli. Protokol in podpora za overjanje poslušajoče storitve morata ustrezati obdelovalniku.

Privzetega opener ne spreminjajte

Kličite direct.open ali proxied.open prek objekta, odgovornega za pot. install_opener spremeni privzeti objekt za celoten proces, ki ga uporabljajo priročne funkcije urllib; knjižnica s takim klicem lahko zato vpliva na nepovezano kodo. Za zgornji izolirani opener ni potreben.

Argument timeout je nastavitev operacije, ne rok celotnega dejanskega trajanja vsakega prenosa. Berite le potrebne podatke in uporabite rok na višji ravni, če ima naloga strogo skupno časovno omejitev.

Ti objekti opener ne spreminjajo odjemalca druge knjižnice, obstoječega procesa ali nastavitev posrednika v brskalniku.

Sorodni članki