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.

Volejte vlastní metodu open tohoto openeru, když trasa patří kontrole. HTTP koncový bod z příkladu může pocházet z vaší služby nebo ze seznamu HTTP proxy pro veřejné testy. Fragment ilustruje vlastnictví; nedefinuje úplnou politiku ověřování ani zdraví. Všechny obslužné rutiny specifické pro účet nechte připojené k tomuto zamýšlenému klientovi.

urllib.request.install_opener() mění procesní výchozí hodnotu, kterou používají pozdější volání urlopen() na úrovni modulu. Kontrola procházející proxy tak může nechat nesouvisející požadavky používat svůj poslední koncový bod. Dočasná instalace a obnovení při úklidu stále umožňují souběžným požadavkům běžet během sdílené změny.

socket.setdefaulttimeout() podobně mění výchozí hodnoty pro sokety vytvořené později. Použijte časový limit na úrovni operace, když jej má dostat pouze kontrola.

Zavírejte odpovědi kontroly a udržujte jejich výsledky konkrétní: odpověď s chybou HTTP není automaticky mrtvý posluchač proxy. Pokud se synchronní urllib kontrola používá v asynchronní službě, přesuňte blokující práci do vhodného pracovníka; toto rozhodnutí o provádění nečiní globální změnu openeru izolovanou.

Kontrola by měla vrátit své pozorování, aniž by zanechala jinou síťovou politiku. Její vlastní klientský objekt a omezená operace činí tuto hranici explicitní.

Související články