Vältä globaaleja urllib-opener-muutoksia välityspalvelinten tarkistajissa
Pidä urllib-välityspalvelintarkistukset oman openerinsa yhteydessä sen sijaan, että korvaisit koko prosessin reititys- ja aikakatkaisuoletukset.
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.Kutsu tämän openerin omaa open-metodia, kun reitti kuuluu tarkistukselle. Esimerkin HTTP-päätepiste voi tulla palvelustasi tai julkisten tarkistusten HTTP-välityspalvelinluettelosta. Katkelma havainnollistaa omistajuutta; se ei määrittele täyttä todennus- tai terveyskäytäntöä. Pidä kaikki tiliikohtaiset käsittelijät siihen tarkoitettuun asiakkaaseen liitettyinä.
urllib.request.install_opener() muuttaa koko prosessin oletusta, jota myöhemmät moduulitason urlopen()-kutsut käyttävät. Välityspalvelimia kiertävä tarkistaja voi siis jättää riippumattomat pyynnöt käyttämään viimeistä päätepistettään. Väliaikainen asennus ja palautus siivouksessa sallii silti samanaikaisten pyyntöjen toimia jaetun muutoksen aikana.
socket.setdefaulttimeout() muuttaa vastaavasti myöhemmin luotavien socketien oletuksia. Käytä toimintotason aikakatkaisua, kun vain tarkistuksen pitäisi saada se.
Sulje tarkistuksen vastaukset ja pidä tulokset täsmällisinä: HTTP-virhevastaus ei ole automaattisesti kuollut välityspalvelinkuuntelija. Jos synkronista urllib-tarkistusta käytetään asynkronisessa palvelussa, siirrä estävä työ sopivalle työntekijälle; tämä suorituspäätös ei tee globaalista opener-muutoksesta eristettyä.
Tarkistuksen pitäisi palauttaa havaintonsa jättämättä toista verkkokäytäntöä taakseen. Sen oma asiakasobjekti ja rajattu toiminto tekevät tämän rajan selväksi.