Python urllib: vypnutí proxy pro jediný opener
Pomocí ProxyHandler({}) vytvořte urllib opener s přímým připojením, aniž byste měnili ostatní klienty a prostředí procesu.
Předejte ProxyHandler prázdné mapování, má-li se jeden urllib opener připojovat přímo:
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ázdný slovník neposkytuje žádné trasy přes proxy. Vynecháte-li mapování, handler místo toho zjistí proxy z prostředí a nastavení platformy. Tyto dva způsoby vytvoření vyjadřují odlišné politiky.
Příklad používá standardní knihovnu Pythonu a zachovává běžné ověřování HTTPS. Blok with zavře odpověď, a to i při opuštění bloku kvůli výjimce.
Přímé požadavky a požadavky přes proxy v jedné aplikaci
Dva openery mohou nést obě politiky bez změn proměnných prostředí mezi voláními:
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 zpětné smyčky svou HTTP proxy nebo pro porovnání přes proxy vyberte kandidáta ze seznamu HTTP proxy. Pokud to služba dovolí, může přenášet spojení k HTTPS cíli pomocí CONNECT. Protokol a podpora autentizace naslouchající služby musí odpovídat handleru.
Výchozí opener neměňte
Volejte direct.open nebo proxied.open přes objekt odpovědný za danou trasu. install_opener mění výchozí opener pro celý proces, který používají pomocné funkce urllib; knihovna s takovým voláním proto může ovlivnit nesouvisející kód. Pro izolovaný opener výše není potřeba.
Argument timeout nastavuje operaci, nikoli úplnou lhůtu skutečně uplynulého času pro každý přenos. Čtěte jen potřebná data a použijte lhůtu na vyšší úrovni, má-li úloha přísný celkový časový rozpočet.
Tyto objekty opener nemění klienta jiné knihovny, existující proces ani nastavení proxy v prohlížeči.