Избегавајте глобалне измене urllib opener-а у проверама проксија
Држите urllib прокси провере локалним за њихов opener уместо замене процесних подразумеваних подешавања усмеравања и временских ограничења.
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.Позовите сопствену методу open овог opener-а када рута припада провери. HTTP крајња тачка из примера може доћи из ваше услуге или са HTTP листе проксија за јавне провере. Исечак илуструје власништво; не дефинише потпуну политику аутентификације или здравља. Држите све руковаоце специфичне за налог везане за тог предвиђеног клијента.
urllib.request.install_opener() мења процесни подразумевани избор који користе каснији позиви urlopen() на нивоу модула. Проверавач који пролази кроз проксије стога може оставити неповезане захтеве да користе његову последњу крајњу тачку. Привремена инсталација и враћање при чишћењу и даље допуштају паралелним захтевима да раде током заједничке измене.
socket.setdefaulttimeout() на сличан начин мења подразумеване вредности за socket-е створене касније. Користите временско ограничење на нивоу операције када га само провера треба да прими.
Затворите одговоре провере и држите њихове резултате конкретним: HTTP одговор са грешком није аутоматски мртав прокси слушалац. Ако се синхрона urllib провера користи у асинхроној услузи, преместите блокирајући посао на одговарајућег радника; та одлука о извршавању не чини глобалну измену opener-а изолованом.
Провера треба да врати своје опажање без остављања друге мрежне политике. Њен сопствени клијентски објекат и ограничена операција чине ту границу експлицитном.