Izbjegavajte globalne izmjene urllib openera u provjerama proxyja
Držite urllib proxy provjere lokalnim 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 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.