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.

Kald denne openers egen open-metode, når en rute hører til tjekket. Eksemplets HTTP-endpoint kan komme fra din tjeneste eller fra HTTP-proxylisten til offentlige tjek. Uddraget illustrerer ejerskab; det definerer ikke den fulde godkendelses- eller sundhedspolitik. Hold eventuelle kontospecifikke handlers knyttet til den tilsigtede klient.

urllib.request.install_opener() ændrer den procesomfattende standard, som senere urlopen()-kald på modulniveau bruger. En tjekker, der løber gennem proxies, kan derfor efterlade urelaterede anmodninger på sin sidste endpoint. Midlertidig installation og gendannelse ved oprydning tillader stadig samtidige anmodninger at køre under den delte ændring.

socket.setdefaulttimeout() ændrer på samme måde standarderne for sockets, der oprettes bagefter. Brug timeoutet på operationsniveau, når kun tjekket skal modtage det.

Luk tjekkets svar, og hold resultaterne specifikke: et HTTP-fejlsvar er ikke automatisk en død proxy-lytter. Hvis et synkront urllib-tjek bruges i en asynkron tjeneste, flyt blokerende arbejde til en passende worker; den udførelsesbeslutning gør ikke global opener-ændring isoleret.

Et tjek bør returnere sin observation uden at efterlade en anden netværkspolitik. Dets eget klientobjekt og begrænsede operation gør den grænse eksplicit.

Relaterede artikler