from urllib.request import ProxyHandler, build_opener

def make_proxy_opener(proxy_uri):
    return build_opener(ProxyHandler({
        "http": proxy_uri,
        "https": proxy_uri,
    }))

opener = make_proxy_opener("http://proxy.example.net:8080")
# Use opener.open(destination, timeout=10) for this route.

Volajte vlastnú metódu open tohto openera, keď trasa patrí kontrole. HTTP koncový bod z príkladu môže pochádzať z vašej služby alebo zo zoznamu HTTP proxy pre verejné testy. Fragment ilustruje vlastníctvo; nedefinuje úplnú politiku overovania ani zdravia. Všetky obslužné rutiny špecifické pre účet nechajte pripojené k zamýšľanému klientovi.

urllib.request.install_opener() mení procesnú predvolenú hodnotu, ktorú používajú neskoršie volania urlopen() na úrovni modulu. Kontrola prechádzajúca cez proxy tak môže nechať nesúvisiace požiadavky používať svoj posledný koncový bod. Dočasná inštalácia a obnovenie pri čistení stále umožňujú súbežným požiadavkám bežať počas zdieľanej zmeny.

socket.setdefaulttimeout() podobne mení predvolené hodnoty pre sokety vytvorené neskôr. Použite časový limit na úrovni operácie, keď ho má dostať iba kontrola.

Zatvárajte odpovede kontroly a udržujte výsledky konkrétne: odpoveď s chybou HTTP nie je automaticky mŕtvy poslucháč proxy. Ak sa synchrónna urllib kontrola používa v asynchrónnej službe, presuňte blokujúcu prácu do vhodného pracovníka; toto rozhodnutie o vykonávaní nerobí globálnu zmenu openera izolovanou.

Kontrola by mala vrátiť svoje pozorovanie bez toho, aby zanechala inú sieťovú politiku. Jej vlastný klientsky objekt a obmedzená operácia robia túto hranicu explicitnou.

Súvisiace články