HTTP 프록시가 보내는 Basic 챌린지에는 ProxyBasicAuthHandler 을 사용합니다. 이 일반 HTTP 예제는 경로와 계정을 하나의 오프너에 담습니다:

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을 일치시키세요. 대상의 Basic 인증 은 다른 핸들러를 사용합니다.

오프너를 직접 호출하면 이 구성이 로컬에 머뭅니다. 요청 URL은 중간자가 아니라 웹사이트로 남습니다. 이 평문 HTTP 경로는 Basic 교환을 암호화하지 않습니다.

이 예제에서 HTTPS 터널 지원을 추론하지 마세요. CONNECT 중 발생하는 407 은 설정 단계에서, 일반적인 대상 응답보다 먼저 발생합니다. 선택한 통합은 그 지점에서 인증을 처리해야 합니다. 웹사이트 로그인 핸들러를 바꿔도 그 이전 챌린지는 고칠 수 없습니다.

자격 증명이 포함된 프록시 URL은 오래된 예제에서 보이는 또 다른 형식입니다. 사용한다면 URL 구분자를 올바르게 인코딩하고, 생성된 비밀을 담은 URL이 로그에 남지 않게 하세요.

관련 글