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.

Anropa den här openerns egen open-metod när en rutt tillhör provet. Exemplets HTTP-slutpunkt kan komma från din tjänst eller från HTTP-proxylistan för offentliga prover. Utdraget illustrerar ägande; det definierar inte den fullständiga autentiserings- eller hälsopolicyn. Håll kontospecifika hanterare kopplade till den avsedda klienten.

urllib.request.install_opener() ändrar det processomfattande standardvärdet som senare urlopen()-anrop på modulnivå använder. En kontrollerare som går igenom proxys kan därför lämna orelaterade förfrågningar att använda sin sista slutpunkt. Tillfällig installation och återställning vid städning tillåter fortfarande samtidiga förfrågningar att köras under den delade ändringen.

socket.setdefaulttimeout() ändrar på samma sätt standardvärdena för sockets som skapas senare. Använd tidsgränsen på åtgärdsnivå när bara provet ska få den.

Stäng provets svar och håll resultaten specifika: ett HTTP-felsvar är inte automatiskt en död proxy-lyssnare. Om ett synkront urllib-prov används i en asynkron tjänst, flytta blockerande arbete till en lämplig worker; det utförandebeslutet gör inte den globala opener-ändringen isolerad.

Ett prov bör returnera sin observation utan att lämna en annan nätverkspolicy efter sig. Dess eget klientobjekt och begränsade operation gör den gränsen explicit.

Relaterade artiklar