Vermy globale urllib-opener-veranderings in proxy-kontroleerders
Hou urllib-proxytoetse by hul eie opener in plaas daarvan om proseswye roetering- en tydsverloopverstellings te vervang.
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.Roep hierdie opener se eie open-metode wanneer 'n roete aan die toets behoort. Die voorbeeld se HTTP-eindpunt kan van jou diens of van die HTTP-proxylys vir openbare toetse kom. Die fragment illustreer eienaarskap; dit definieer nie die volledige verifikasie- of gesondheidsbeleid nie. Hou enige rekening-spesifieke handlers aan daardie beoogde kliënt geheg.
urllib.request.install_opener() verander die proseswye verstek wat deur latere modulevlak-urlopen()-oproepe gebruik word. 'n Kontroleerder wat deur proxys loop, kan dus onverwante versoeke met sy laaste eindpunt laat voortgaan. Tydelik installeer en in die opruiming herstel laat steeds gelyktydige versoeke tydens die gedeelde wysiging loop.
socket.setdefaulttimeout() verander net so die verstekke vir sokkette wat daarna geskep word. Gebruik die bewerkingsvlak-tydsverloop wanneer net die toets dit moet ontvang.
Maak toetsresponse toe en hou hul resultate spesifiek: 'n HTTP-foutrespons is nie outomaties 'n dooie proxy-luisteraar nie. As 'n sinchroniese urllib-toets in 'n asinchrone diens gebruik word, skuif blokkerende werk na 'n gepaste werker; daardie uitvoeringsbesluit maak globale opener-wysiging nie geïsoleer nie.
'n Toets moet sy waarneming teruggee sonder om 'n ander netwerkbeleid agter te laat. Sy eie kliëntobjek en begrensde bewerking maak daardie grens eksplisiet.