urllib3 ProxyManager: адпраўка даных Basic у proxy_headers
Перадавайце даныя проксі Basic праз ProxyManager.proxy_headers, каб яны былі даступныя падчас HTTPS CONNECT і не станавіліся загалоўкамі прызначэння.
ProxyManager мае асобны аргумент proxy_headers для загалоўкаў, што адпраўляюцца пасярэдніку. Для проксі, які прымае аўтэнтыфікацыю Basic:
import urllib3
proxy_headers = urllib3.make_headers(
proxy_basic_auth=f'{proxy_user}:{proxy_password}'
)
with urllib3.ProxyManager(
'http://proxy.example:8080',
proxy_headers=proxy_headers,
timeout=urllib3.Timeout(connect=5, read=10),
) as http:
response = http.request('GET', 'https://service.example/data')
print(response.status)
Для звычайнага прызначэння HTTP гэтыя загалоўкі ідуць з перанакіраваным запытам да проксі. Для прызначэння HTTPS праз CONNECT яны належаць да наладкі тунеля, а не да кожнага запыту зашыфраванага сайта.
Звычайны аргумент headers апісвае загалоўкі запыту да прызначэння. Гэтая аўтэнтыфікацыя проксі належыць іншаму атрымальніку. Паставіць уліковы запіс проксі туды не тое самае, што наладзіць папярэдні абмен CONNECT.
make_headers будуе значэнне загалоўка Basic. Ён не ўзгадняе NTLM, не выбірае падтрыманую схему аўтаматычна і не даказвае, што проксі прымае гэты ўліковы запіс.
Проксі з TLS-слухачом дадае асобны кантэкст TLS проксі. Адрас http:// вышэй наўмысна апісвае звычайны HTTP-слухач, які праводзіць прызначэнне HTTPS праз тунель.