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.

Galwch ddull open yr opener hwn ei hun pan fo llwybr yn perthyn i'r archwiliad. Gall pwynt terfyn HTTP yr enghraifft ddod o'ch gwasanaeth neu o'r rhestr proxy HTTP ar gyfer archwiliadau cyhoeddus. Mae'r darn yn dangos perchnogaeth; nid yw'n diffinio'r polisi dilysu na iechyd llawn. Cadwch unrhyw handlwyr sy'n benodol i gyfrif ynghlwm wrth y cleient a fwriedir.

Mae urllib.request.install_opener() yn newid y rhagosodiad ar gyfer y broses gyfan a ddefnyddir gan alwadau urlopen() ar lefel modiwl yn ddiweddarach. Felly gall archwilydd sy'n mynd trwy broxies adael i geisiadau di-gysylltiad ddefnyddio ei bwynt terfyn olaf. Mae gosod dros dro ac adfer wrth lanhau yn dal i ganiatáu i geisiadau cyfochrog redeg yn ystod y newid a rennir.

Yn yr un modd mae socket.setdefaulttimeout() yn newid y rhagosodiadau ar gyfer socedi a grëir yn ddiweddarach. Defnyddiwch y terfyn amser ar lefel gweithrediad pan mai dim ond yr archwiliad ddylai ei gael.

Caewch ymatebion archwilio a chadwch eu canlyniadau'n benodol: nid yw ymateb gwall HTTP yn awtomatig yn wrandawr proxy marw. Os defnyddir archwiliad urllib cydamserol mewn gwasanaeth async, symudwch waith blocio i weithiwr priodol; nid yw'r penderfyniad gweithredu hwnnw'n gwneud newid byd-eang yr opener yn ynysedig.

Dylai archwiliad ddychwelyd ei arsylwad heb adael polisi rhwydwaith arall ar ôl. Mae ei wrthrych cleient ei hun a'i weithrediad cyfyngedig yn gwneud y ffin honno'n amlwg.

Erthyglau cysylltiedig