HTTPX의 proxy와 mounts로 프록시 경로 선택하기
HTTPX의 proxy와 전송 마운트를 사용하면서 엔드포인트 스킴, 환경 변수 처리, 연결 및 읽기 시간 제한을 구분합니다.
하나의 엔드포인트가 클라이언트 요청을 처리해야 한다면 proxy= 를 사용하세요. 목적지 스킴별로 다른 경로가 필요하면 mounts= 를 사용합니다. 이 예제는 해당 HTTPX 인터페이스를 사용합니다. 이전 proxies= API를 쓰는 프로젝트는 그 버전에 맞게 설정해야 합니다.
엔드포인트 하나 사용하기
import httpx
timeout = httpx.Timeout(15.0, connect=5.0)
with httpx.Client(
proxy="http://127.0.0.1:8080",
trust_env=False,
timeout=timeout,
) as client:
response = client.get("https://example.com/")
response.raise_for_status()
print(response.status_code)
로컬 리스너를 실행 중인 HTTP 프록시로 바꾸세요. HTTP 프록시 목록의 후보도 자신의 목적지에 맞춰 테스트해야 합니다. HTTPS 목적지는 CONNECT를 통해 이 http:// 엔드포인트를 사용할 수 있습니다. 엔드포인트 스킴을 https:// 로 바꾸면 프록시 자체와 TLS를 맺겠다는 요청이 되며, 리스너와 클라이언트가 모두 지원해야 합니다.
목적지 스킴별로 경로 나누기
import httpx
mounts = {
"http://": httpx.HTTPTransport(
proxy="http://127.0.0.1:8080",
trust_env=False,
),
"https://": httpx.HTTPTransport(
proxy="http://127.0.0.1:8081",
trust_env=False,
),
}
with httpx.Client(
mounts=mounts,
trust_env=False,
timeout=httpx.Timeout(15.0, connect=5.0),
) as client:
response = client.get("https://example.com/")
response.raise_for_status()
print(response.status_code)
마운트 키는 목적지 URL과 일치시킵니다. 여기서는 HTTP 목적지가 포트 8080을, HTTPS 목적지가 포트 8081을 선택합니다. 프록시 값은 리스너 자체의 프로토콜을 나타내므로 HTTPS 마운트에 http:// 프록시가 들어가도 올바릅니다. 자신의 엔드포인트로 바꾸고 두 목적지 스킴을 모두 확인하세요.
두 예제 모두 클라이언트에 trust_env=False 를 설정하며, 전송 객체를 제공하는 곳에는 그 객체에도 설정합니다. 그렇지 않으면 HTTPX는 기본적으로 프록시와 인증서 환경 변수를 읽습니다. 배포가 이 변수에 의존한다면 자동 탐색을 켜 두거나 필요한 경로와 신뢰 설정을 명시하세요. 사설 신뢰에는 해당 HTTPX 버전이 지원하는 TLS 컨텍스트와 CA 설정을 쓰고, 목적지 검증은 켜 두세요. HTTPS 프록시 신뢰는 목적지 신뢰와 별개일 수 있습니다.
httpx.Timeout(15.0, connect=5.0) 는 연결 타임아웃을 덮어쓰고 다른 설정된 타임아웃 항목에는 기본값을 제공합니다. 읽기, 쓰기, 풀 대기는 각각 별도 제한이 있습니다. 십오 초는 작업 전체의 경과 시간 한도가 아닙니다. 풀 타임아웃은 다른 작업이 사용 가능한 연결을 점유했다는 뜻일 수도 있습니다. 프록시에 도달할 수 없다는 증거로 보기 전에 클라이언트와 스트리밍 응답을 올바르게 닫으세요.