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.

Маршрут текшерүүгө таандык болгондо, ушул opener'дин өзүнүн open ыкмасын чакырыңыз. Мисалдын HTTP акыркы чекити сиздин кызматтан же коомдук текшерүүлөр үчүн HTTP прокси тизмесинен келиши мүмкүн. Үзүндү ээликти көрсөтөт; ал толук аутентификация же ден соолук саясатын аныктабайт. Эсепке тиешелүү ар кандай handler'ди ошол көздөлгөн клиентке байланыштырып кармаңыз.

urllib.request.install_opener() кийинки модулдук деңгээлдеги urlopen() чакыруулары колдонгон процесс боюнча демейкини өзгөртөт. Ошондуктан проксилерди айланып жүргөн текшерүүчү байланышсыз суроолорду өзүнүн акыркы чекитинде калтырышы мүмкүн. Убактылуу орнотуу жана тазалоодо калыбына келтирүү орток өзгөрүү учурунда параллелдүү суроолордун иштешине дагы уруксат берет.

socket.setdefaulttimeout() ошондой эле кийин түзүлгөн socket'тердин демейкилерин өзгөртөт. Аны тек текшерүү гана алышы керек болгондо операция деңгээлиндеги тайм-аутту колдонуңуз.

Текшерүүнүн жоопторун жабыңыз жана жыйынтыктарды так кармаңыз: HTTP ката жообу автоматтык түрдө өлгөн прокси угуучусу эмес. Эгер синхрондук urllib текшерүүсү асинхрондук кызматта колдонулса, бөгөттөгөн ишти ылайыктуу worker'ге жылдырыңыз; бул аткаруу чечими глобалдык opener өзгөрүүсүн обочолонгон кылбайт.

Текшерүү башка тармактык саясатты калтырбастан өз байкоосун кайтарышы керек. Анын өз клиент объектиси жана чектелген операциясы ошол чекти ачык кылат.

Тектеш макалалар