Shmangni ndryshimet globale të opener-it urllib në kontrolluesit e proxy
Mbajini provat e proxy me urllib lokale në opener-in e tyre, në vend të zëvendësimit të rrugëzimit dhe afateve të paracaktuara të të gjithë procesit.
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.Thirrni metodën open të vetë këtij opener-i kur një rrugë i përket provës. Pika përfundimtare HTTP e shembullit mund të vijë nga shërbimi juaj ose nga lista e proxy HTTP për prova publike. Fragmenti ilustron pronësinë; nuk përcakton politikën e plotë të vërtetimit ose të shëndetit. Mbajini çdo trajtues specifik të llogarisë të lidhur me atë klient të synuar.
urllib.request.install_opener() ndryshon parazgjedhjen e të gjithë procesit që përdorin thirrjet urlopen() të mëvonshme në nivel moduli. Prandaj një kontrollues që kalon nëpër proxy mund të lërë kërkesa të palidhura të përdorin pikën e tij të fundit përfundimtare. Instalimi i përkohshëm dhe rikthimi gjatë pastrimit ende lejojnë kërkesat e njëkohshme të ekzekutohen gjatë ndryshimit të përbashkët.
socket.setdefaulttimeout() në mënyrë të ngjashme ndryshon parazgjedhjet për socket-et e krijuara më pas. Përdorni afatin në nivel operacioni kur vetëm prova duhet ta marrë atë.
Mbyllni përgjigjet e provës dhe mbajini rezultatet specifike: një përgjigje gabimi HTTP nuk është automatikisht një dëgjues proxy i vdekur. Nëse një provë urllib sinkrone përdoret në një shërbim asinkron, zhvendosni punën bllokuese te një worker i përshtatshëm; ai vendim ekzekutimi nuk e bën ndryshimin global të opener-it të izoluar.
Një provë duhet të kthejë vëzhgimin e saj pa lënë një politikë tjetër rrjeti pas. Objekti i saj i klientit dhe operacioni i kufizuar e bëjnë atë kufi eksplicit.