install_opener() ni ikki marta chaqirish ikkinchi opener-ni birinchisiga qo'shmaydi. U modulning standart opener-ini almashtiradi. Agar bir obyekt proxy-ni, boshqasi esa saytga kirishni bilsa, kerakli handler-lar bilan bitta opener quring.

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 va manzil misollardir. Ommaviy HTTP proxy orqali yetib borish mumkin bo'lgan ommaviy xizmat uchun HTTP proxy ro'yxati marshrutlash handler-i uchun nomzod endpoint-lar beradi. Bu opener HTTPS so'rovini HTTP proxy orqali yo'naltiradi va manzilning Basic chaqiruvini boshqaradi. U proxy autentifikatsiyasini sozlamaydi.

Agar proxy ham kirishni talab qilsa, qo'llab-quvvatlanadigan proxy-autentifikatsiya tartibini alohida tanlang. CONNECT vaqtidagi 407 manzil o'z chaqiruvini chiqarishidan oldin yuz beradi. Sayt ma'lumotlarini parol menejeriga qo'shish o'sha avvalgi almashinuvni qondira olmaydi.

opener.open() ni to'g'ridan-to'g'ri chaqirish konfiguratsiyani operatsiya bilan saqlaydi. Ilova barcha qulay chaqiruvlar ushbu opener-ni baham ko'rishini ataylab xohlamasa, modul darajasidagi standartni o'zgartirish shart emas.

O'xshash maqolalar