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 krajnja točka iz primjera može doći iz vaše usluge ili s HTTP popisa proxyja za javne provjere. Isječak ilustrira vlasništvo; ne definira potpunu politiku autentifikacije ili zdravlja. Držite sve obrađivače specifične za račun vezane za tog predviđenog klijenta.

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

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 konkretnim: HTTP odgovor s greškom nije automatski mrtav proxy slušalac. 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 izmjenu 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