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 대상에서는 이 헤더가 전달된 요청과 함께 프록시로 이동합니다. CONNECT를 사용하는 HTTPS 대상에서는 각 암호화된 웹사이트 요청이 아니라 터널 설정에 속합니다.

일반 headers 인자는 대상 요청 헤더를 설명합니다. 이 프록시 인증은 다른 수신자에게 속합니다. 프록시 계정을 그곳에 두는 것은 앞선 CONNECT 교환을 구성하는 것과 같지 않습니다.

make_headers는 Basic 헤더 값을 만듭니다. NTLM을 협상하지 않고, 지원되는 방식을 자동으로 선택하지 않으며, 프록시가 그 계정을 받아들인다는 것도 증명하지 않습니다.

TLS 리스너가 있는 프록시는 별도의 프록시 TLS 컨텍스트를 추가합니다. 위의 http:// 엔드포인트는 터널을 통해 HTTPS 대상을 운반하는 일반 HTTP 리스너를 의도적으로 설명합니다.

관련 글