사무실 프록시는 한 계정을 요구합니다. 그 뒤의 웹사이트는 또 다른 계정을 요구합니다. Requests는 이 두 Basic 로그인을 위한 별도의 입력을 제공합니다. 프록시 URL에 담는 자격 증명과 요청의 auth 인자입니다.

from urllib.parse import quote
import requests

proxy_url = (
    f"http://{quote(proxy_user, safe='')}:"
    f"{quote(proxy_password, safe='')}@proxy.example:8080"
)
response = requests.get(
    "https://reports.example/private/",
    proxies={"https": proxy_url},
    auth=(site_user, site_password),
    timeout=(5, 20),
)
response.raise_for_status()

네 개의 계정 변수는 애플리케이션의 자격 증명 설정에서 가져옵니다. 프록시 사용자 이름과 비밀번호를 따로 인코딩하면 at 기호 같은 문자를 URL 구분자로 바꾸지 않고 유지합니다.

딕셔너리의 https 키는 HTTPS 대상에 대해 이 경로를 선택합니다. 값이 여전히 http:// 으로 시작하는 것은 이 예시 프록시에 도달할 때 쓰는 프로토콜이 그것이기 때문입니다.

이 HTTPS 요청에서 프록시 로그인은 CONNECT 교환에 속합니다. 사이트 로그인은 설정된 터널을 지나는 이후 요청에 속합니다. 어댑터가 자체 URL에서 프록시 인증을 이끌어내게 하면 해당 홉에 그대로 머뭅니다. 이 Basic 상황에서는 결합 인증 클래스가 필요하지 않습니다.

407은 중간자의 요구를 나타냅니다. 사이트에서 온 401은 대상의 요구를 나타냅니다. 설정된 두 계정 중 어느 쪽을 살펴야 할지는 그 응답으로 판단합니다.

관련 글