Izbegavajte globalne izmene urllib openera u proverama proxyja
Držite urllib proxy provere lokalnim za njihov opener umesto zamene procesnih zadatih postavki usmeravanja 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 sopstvenu metodu open ovog openera kada ruta pripada proveri. HTTP krajnja tačka iz primera može doći iz vaše usluge ili sa HTTP liste proxyja za javne provere. Isječak ilustruje vlasništvo; ne definiše potpunu politiku autentifikacije ili zdravlja. Držite sve rukovaoce specifične za nalog vezane za tog predviđenog klijenta.
urllib.request.install_opener() menja procesni zadati izbor koji koriste kasniji pozivi urlopen() na nivou modula. Proveravač koji prolazi kroz proxyje stoga može ostaviti nepovezane zahteve da koriste njegovu poslednju krajnju tačku. Privremena instalacija i vraćanje pri čišćenju i dalje dopuštaju paralelnim zahtevima da rade tokom zajedničke izmene.
socket.setdefaulttimeout() na sličan način menja zadate vrednosti za socket-e stvorene kasnije. Koristite vremensko ograničenje na nivou operacije kada ga samo provera treba primiti.
Zatvorite odgovore provere i držite njihove rezultate konkretnim: HTTP odgovor sa greškom nije automatski mrtav proxy slušalac. Ako se sinhrona urllib provera koristi u asinhronoj usluzi, premestite blokirajući posao na odgovarajućeg radnika; ta odluka o izvršavanju ne čini globalnu izmenu openera izolovanom.
Provera treba da vrati svoje opažanje bez ostavljanja druge mrežne politike. Njen sopstveni klijentski objekat i ograničena operacija čine tu granicu eksplicitnom.