Python urllib: HTTP 요청을 위한 Basic 프록시 인증
HTTP 프록시의 Basic 챌린지에 사용할 명시적 urllib 오프너를 만들고, 이 일반 HTTP 교환을 HTTPS CONNECT 인증과 구분합니다.
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이 로그에 남지 않게 하세요.