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