Настраивайте пакеты CA для прокси и источника в PycURL раздельно
Используйте https-URL прокси для TLS к посреднику, с PROXY_CAINFO для этой стороны и CAINFO для назначения.
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. Сохраняйте проверку сертификатов: отключение проверки прокси убирает проверку подлинности посредника, а не устанавливает недостающий удостоверяющий центр.