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.

Iškvieskite šio opener savąjį open metodą, kai maršrutas priklauso patikrai. Pavyzdžio HTTP galutinis taškas gali ateiti iš jūsų paslaugos arba iš HTTP proxy sąrašo viešoms patikroms. Fragmentas iliustruoja nuosavybę; jis neapibrėžia visos autentifikavimo ar būsenos politikos. Laikykite bet kokius paskyrai būdingus apdorotuvus prijungtus prie numatyto kliento.

urllib.request.install_opener() pakeičia viso proceso numatytąją reikšmę, kurią naudoja vėlesni modulio lygio urlopen() kvietimai. Todėl tikrintuvas, einantis per proxy, gali palikti nesusijusias užklausas naudojantis jo paskutiniu galutiniu tašku. Laikinas įdiegimas ir atkūrimas valant vis tiek leidžia lygiagrečioms užklausoms veikti bendro pakeitimo metu.

socket.setdefaulttimeout() panašiai pakeičia vėliau sukuriamų socketų numatytąsias reikšmes. Naudokite operacijos lygio laiko limitą, kai jį turi gauti tik patikra.

Uždarykite patikros atsakymus ir laikykite rezultatus konkrečius: HTTP klaidos atsakymas nebūtinai reiškia negyvą proxy klausytoją. Jei sinchroninė urllib patikra naudojama asinchroninėje paslaugoje, perkelkite blokuojantį darbą į tinkamą worker; šis vykdymo sprendimas nepadaro visuotinio opener pakeitimo izoliuotu.

Patikra turėtų grąžinti savo stebėjimą nepalikdama kitos tinklo politikos. Jos pačios kliento objektas ir apribota operacija daro šią ribą aiškią.

Susiję straipsniai