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.

Pozovite vlastitu metodu open ovog openera kada ruta pripada provjeri. HTTP završna točka iz primjera može doći iz vaše usluge ili s HTTP popisa proxyja za javne provjere. Isječak prikazuje vlasništvo; ne definira potpunu politiku autentifikacije ili zdravlja. Držite sve obrađivače specifične za račun vezane uz tog predviđenog klijenta.

urllib.request.install_opener() mijenja procesni zadani izbor koji koriste kasniji pozivi urlopen() na razini modula. Provjeravatelj koji prolazi kroz proxyje stoga može ostaviti nepovezane zahtjeve da koriste njegovu posljednju završnu točku. Privremena instalacija i vraćanje pri čišćenju i dalje dopuštaju paralelnim zahtjevima da rade tijekom zajedničke promjene.

socket.setdefaulttimeout() na sličan način mijenja zadane vrijednosti za socket-e stvorene kasnije. Koristite vremensko ograničenje na razini operacije kada ga samo provjera treba primiti.

Zatvorite odgovore provjere i držite njihove rezultate konkretnima: HTTP odgovor s pogreškom nije automatski mrtav proxy slušatelj. Ako se sinkrona urllib provjera koristi u asinkronoj usluzi, premjestite blokirajući posao na odgovarajućeg radnika; ta odluka o izvršavanju ne čini globalnu promjenu openera izoliranom.

Provjera treba vratiti svoje opažanje bez ostavljanja druge mrežne politike. Njezin vlastiti klijentski objekt i ograničena operacija čine tu granicu eksplicitnom.

Povezani članci