Zeep нужен прокси до чтения WSDL
Создайте сессию Requests и Transport Zeep до того, как строить Client из удалённого WSDL.
Построение Zeep Client из удалённого WSDL может сразу загрузить этот документ и его импорты. Настройте Transport заранее, а не задавайте прокси после того, как Client уже попытался загрузить описание сервиса.
from requests import Session
from zeep import Client
from zeep.transports import Transport
session = Session()
session.proxies.update({
"http": "http://proxy.example.net:8080",
"https": "http://proxy.example.net:8080",
})
transport = Transport(
session=session,
timeout=10,
operation_timeout=30,
)
client = Client(wsdl_url, transport=transport)
wsdl_url — это фактический URL описания сервиса. Если этот сервис и его импорты общедоступны и публичные прокси разрешены, список HTTP-прокси даёт кандидатов для прокси-URL сессии. Держите настроенную сессию активной для последующих операций SOAP, а затем закройте её, когда эта работа завершится.
Transport.timeout управляет загрузкой WSDL и XSD. operation_timeout управляет HTTP-запросами для операций сервиса. Поэтому тайм-аут метаданных при построении Client — это другой этап, чем тайм-аут вызова метода позже.
В этом примере интеграция с окружением Requests остаётся активной. Если значения прокси из окружения конфликтуют с явно требуемым маршрутом, используйте session.trust_env=False и явно укажите нужный пакет CA и параметры аутентификации.
Проверьте URL импортированного документа, если инициализация всё ещё не удаётся. WSDL верхнего уровня может успешно загрузиться, тогда как импортированная схема использует другое имя хоста или протокол назначения.