Izbjegnite globalne promjene urllib openera u provjerama proxyja
Držite urllib proxy provjere lokalnima za njihov opener umjesto zamjene procesnih zadanih postavki usmjeravanja i vremenskih ograničenja.
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.