Python Requests: 프록시와 웹사이트의 Basic 로그인 분리
프록시의 Basic 로그인은 프록시 URL로, 최종 사이트의 Basic 로그인은 Requests의 auth 인자로 전달합니다.
사무실 프록시는 한 계정을 요구합니다. 그 뒤의 웹사이트는 또 다른 계정을 요구합니다. 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은 대상의 요구를 나타냅니다. 설정된 두 계정 중 어느 쪽을 살펴야 할지는 그 응답으로 판단합니다.