from io import BytesIO
import pycurl

body = BytesIO()
curl = pycurl.Curl()
try:
    curl.setopt(pycurl.URL, "https://api.example/")
    curl.setopt(pycurl.PROXY, "https://proxy.example:8443")
    curl.setopt(pycurl.PROXY_CAINFO, "/path/to/proxy-ca.pem")
    curl.setopt(pycurl.CAINFO, "/path/to/origin-ca.pem")
    curl.setopt(pycurl.CONNECTTIMEOUT, 5)
    curl.setopt(pycurl.TIMEOUT, 30)
    curl.setopt(pycurl.WRITEDATA, body)
    curl.perform()
finally:
    curl.close()

HTTPS 프록시를 지원하는 PycURL/libcurl 빌드를 사용하십시오. 번들 경로는 의도한 신뢰 집합을 나타냅니다. PROXY_CAINFO은 중간자를 검증하고 CAINFO는 목적지의 TLS를 검증합니다. 기존 신뢰가 해당 연결을 이미 포함한다면 명시적 재정의를 생략하십시오.

PROXY의 URL은 그 리스너를 설명합니다. 숫자로 PROXYTYPE를 추측할 필요는 없습니다. 일반 HTTP 리스너라면 목적지가 HTTPS여도 URL은 http://로 유지됩니다. 이 경우 HTTP 프록시 목록이 엔드포인트 후보를 제공하며, 프록시 TLS 번들은 리스너가 실제로 TLS를 사용할 때만 적용됩니다.

필요할 때 PROXYUSERNAME과 PROXYPASSWORD로 프록시 계정을 제공하십시오. 인증서 검증은 유지하십시오. 프록시 검증을 끄면 누락된 인증 기관을 설치하는 대신 중간자의 신원 확인이 사라집니다.

관련 글