install_opener() г хоёр удаа дуудах нь хоёр дахь opener-г эхнийх нь дээр нэмэхгүй. Энэ нь модулийн өгөгдмөл opener-г орлуулна. Нэг объект proxy-г, нөгөө нь вэбсайтын нэвтрэлтийг мэддэг бол шаардлагатай handlers-тай нэг opener байгуулна.

import os
from urllib.request import (ProxyHandler, HTTPBasicAuthHandler,
                            HTTPPasswordMgrWithDefaultRealm, build_opener)

passwords = HTTPPasswordMgrWithDefaultRealm()
passwords.add_password(None, 'https://example.com/private/',
                       os.environ['SITE_USER'], os.environ['SITE_PASSWORD'])
opener = build_opener(
    ProxyHandler({'https': 'http://203.0.113.10:8080'}),
    HTTPBasicAuthHandler(passwords),
)
with opener.open('https://example.com/private/report', timeout=10) as response:
    body = response.read()

Proxy болон очих газар нь жишээ юм. Нийтийн HTTP proxy-гоор хүрэх боломжтой нийтийн үйлчилгээний хувьд HTTP proxy жагсаалт маршрутжуулалтын handler-д нэр дэвшигч endpoint-уудыг өгдөг. Энэ opener HTTPS хүсэлтийг HTTP proxy-гоор дамжуулж, очих газрын Basic сорилтыг шийдвэрлэнэ. Энэ нь proxy баталгаажуулалтыг тохируулахгүй.

Хэрэв proxy мөн нэвтрэлт шаарддаг бол дэмжигдсэн proxy баталгаажуулалтын зохицуулалтыг тусад нь сонгоно уу. CONNECT үеийн 407 нь очих газар өөрийн сорилтыг гаргахаас өмнө тохиолддог. Вэбсайтын нэвтрэх мэдээллийг нууц үгийн менежерт нэмэх нь тэр өмнөх солилцоог хангаж чадахгүй.

opener.open() г шууд дуудах нь тохиргоог үйлдэлтэй хамт хадгална. Програм нь бүх тав тухтай дуудлага энэ opener-г хуваалцахыг санаатайгаар хүсэхгүй бол модулийн түвшний өгөгдмөлийг өөрчлөх шаардлагагүй.

Холбоотой нийтлэлүүд