Python urllib: базавая аўтэнтыфікацыя проксі для HTTP-запытаў
Стварыце явны opener urllib для запыту Basic ад HTTP-проксі і адрозніце гэты звычайны абмен HTTP ад аўтэнтыфікацыі HTTPS CONNECT.
Для запыту Basic ад HTTP-проксі выкарыстоўвайце ProxyBasicAuthHandler. Гэты звычайны прыклад HTTP трымае маршрут і ўліковы запіс у адным opener:
import os
from urllib.request import (
ProxyHandler, ProxyBasicAuthHandler,
HTTPPasswordMgrWithDefaultRealm, build_opener,
)
proxy_url = 'http://proxy.example:8080'
passwords = HTTPPasswordMgrWithDefaultRealm()
passwords.add_password(
None, proxy_url,
os.environ['PROXY_USER'], os.environ['PROXY_PASSWORD'],
)
opener = build_opener(
ProxyHandler({'http': proxy_url}),
ProxyBasicAuthHandler(passwords),
)
with opener.open('http://example.com/', timeout=10) as response:
print(response.status)Выкарыстоўвайце рэальную канчатковую кропку і ўліковы запіс, выдадзены аператарам. Гэты апрацоўшчык выкарыстоўвае менеджар пароляў для запыту проксі; супастаўце мэтавыя проксі URI і realm. Базавая аўтэнтыфікацыя на прызначэнні выкарыстоўвае іншы апрацоўшчык.
Прамы выклік opener захоўвае гэтую наладу лакальнай. URL запыту застаецца сайтам, а не пасрэднікам. Гэты шлях HTTP без шыфравання не шыфруе абмен Basic.
Не рабіце вывад аб падтрымцы тунеля HTTPS з гэтага прыкладу. 407 падчас CONNECT узнікае на этапе наладкі, перад звычайным адказам прызначэння; абраная інтэграцыя павінна апрацоўваць аўтэнтыфікацыю там. Змена апрацоўшчыка ўваходу на сайце не выправіць той ранейшы запыт.
URL проксі з уліковымі данымі — іншы фармат, які сустракаецца ў старых прыкладах. Калі выкарыстоўваеце, карэктна кадуйце раздзяляльнікі URL і трымайце атрыманы URL з сакрэтам па-за журналамі.