urllib3 ProxyManager: надсилання Basic-облікових даних у proxy_headers
Передавайте Basic-облікові дані проксі через ProxyManager.proxy_headers, щоб вони були доступні під час HTTPS CONNECT і не ставали заголовками призначення.
ProxyManager має окремий аргумент proxy_headers для заголовків, що надсилаються посереднику. Для проксі, який приймає Basic authentication:
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 описує заголовки запиту до призначення. Ця proxy authentication належить іншому отримувачу. Розміщення облікового запису проксі там не еквівалентне налаштуванню попереднього CONNECT-обміну.
make_headers формує значення Basic-заголовка. Він не узгоджує NTLM, не вибирає підтримувану схему автоматично й не доводить, що проксі приймає цей обліковий запис.
Проксі з TLS listener додає окремий proxy TLS context. Наведена вище кінцева точка http:// навмисно описує звичайний HTTP listener, що передає HTTPS-призначення через тунель.