Nid yw galw install_opener() ddwywaith yn ychwanegu'r ail opener at y cyntaf. Mae'n disodli opener diofyn y modiwl. Os yw un gwrthrych yn gwybod am y proxy ac un arall am fewngofnodi'r wefan, adeiladwch un opener sy'n cynnwys y handlwyr gofynnol.

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()

Mae'r proxy a'r gyrchfan yn enghreifftiau. Ar gyfer gwasanaeth cyhoeddus y gellir ei gyrraedd drwy broxy HTTP cyhoeddus, mae'r rhestr proxy HTTP yn darparu penau terfyn posibl ar gyfer y handlwr llwybro. Mae'r opener hwn yn llwybro'r cais HTTPS drwy'r proxy HTTP ac yn trin her Basic y gyrchfan. Nid yw'n ffurfweddu dilysu'r proxy.

Os oes angen mewngofnodi ar y proxy hefyd, dewiswch drefniant dilysu proxy a gefnogir ar wahân. Mae 407 ar adeg CONNECT yn digwydd cyn i'r gyrchfan allu cyhoeddi ei her ei hun. Ni all ychwanegu manylion mewngofnodi'r wefan at y rheolwr cyfrineiriau fodloni'r cyfnewid cynharach hwnnw.

Mae galw opener.open() yn uniongyrchol yn cadw y ffurfweddiad gyda'r llawdriniaeth. Nid oes angen newid y diofyn ar draws y modiwl oni bai bod y rhaglen am i bob galwad gyfleus rannu'r opener hwn.

Erthyglau cysylltiedig