Odovzdajte ProxyHandler prázdne mapovanie, ak sa má jeden urllib opener pripájať priamo:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))

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

Prázdny slovník neposkytuje žiadne trasy cez proxy. Vynechanie mapovania naopak umožní handleru zistiť proxy z prostredia a nastavení platformy. Tieto dva spôsoby vytvorenia vyjadrujú odlišné politiky.

Príklad používa štandardnú knižnicu Pythonu a zachováva bežné overovanie HTTPS. Blok with zatvorí odpoveď aj pri opustení bloku pre výnimku.

Priame požiadavky a požiadavky cez proxy v jednej aplikácii

Dva openery môžu niesť obe politiky bez zmien premenných prostredia medzi volaniami:

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)

Nahraďte adresu spätnej slučky svojím HTTP proxy alebo na porovnanie cez proxy vyberte kandidáta zo zoznamu HTTP proxy. Ak to služba dovolí, môže prenášať spojenie k HTTPS cieľu pomocou CONNECT. Protokol a podpora autentifikácie počúvajúcej služby musia zodpovedať handleru.

Predvolený opener nemeňte

Volajte direct.open alebo proxied.open cez objekt zodpovedný za trasu. install_opener mení predvolený objekt pre celý proces, ktorý používajú pomocné funkcie urllib; knižnica s takým volaním preto môže ovplyvniť nesúvisiaci kód. Pre izolovaný opener vyššie nie je potrebný.

Argument timeout nastavuje operáciu, nie úplnú lehotu skutočne uplynutého času každého prenosu. Čítajte len potrebné údaje a použite lehotu na vyššej úrovni, ak má úloha prísny celkový časový rozpočet.

Tieto objekty opener nemenia klienta inej knižnice, existujúci proces ani nastavenia proxy v prehliadači.

Súvisiace články