Python urllib: комбинирање на proxy насочување со Basic автентикација на веб-страница
Комбинирајте urllib насочување и Basic автентикација на одредиштето во еден експлицитен opener без двапати да го замените глобалниот opener.
Повикувањето на install_opener() двапати не го додава вториот opener на првиот. То го заменува стандардниот opener на модулот. Ако еден објект го знае proxy, а друг пријавувањето на страницата, изградете еден opener со потребните handlers.
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 дава кандидат-endpoints за handler-от за насочување. Овој opener го насочува HTTPS барањето преку HTTP proxy и го обработува Basic предизвикот на одредиштето. Не конфигурира автентикација на proxy.
Ако и proxy бара пријавување, изберете поддржан распоред за автентикација на proxy одделно. 407 при CONNECT се јавува пред одредиштето да може да го издаде својот предизвик. Додавањето на податоците за страницата во менаџерот за лозинки не може да ја задоволи таа поранешна размена.
Директното повикување на opener.open() го задржува конфигурирањето со операцијата. Нема потреба да се менува стандардот на ниво на модул, освен ако апликацијата намерно не сака сите практични повици да го делат овој opener.