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-а изолованом.

Провера треба да врати своје опажање без остављања друге мрежне политике. Њен сопствени клијентски објекат и ограничена операција чине ту границу експлицитном.

Повезани чланци