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()

Используйте сборку PycURL/libcurl, поддерживающую HTTPS-прокси. Пути к пакетам обозначают нужные наборы доверия: PROXY_CAINFO проверяет посредника; CAINFO проверяет TLS назначения. Не задавайте явное переопределение, если существующее доверие уже покрывает это соединение.

URL в PROXY описывает свой слушатель. Числовое предположение PROXYTYPE не требуется. Для обычного HTTP-слушателя URL остаётся http://, даже если назначение использует HTTPS. В этом случае список HTTP-прокси даёт кандидатов на конечные точки; пакет TLS прокси применяется только тогда, когда слушатель действительно использует TLS.

При необходимости укажите учётную запись прокси через PROXYUSERNAME и PROXYPASSWORD. Сохраняйте проверку сертификатов: отключение проверки прокси убирает проверку подлинности посредника, а не устанавливает недостающий удостоверяющий центр.

Похожие статьи