Zeep necesita el proxy antes de leer el WSDL
Cree la sesión de Requests y el transporte de Zeep antes de construir un Client desde un WSDL remoto.
Construir un Client de Zeep desde un WSDL remoto puede descargar de inmediato ese documento y sus importaciones. Configure el transporte primero, en lugar de establecer un proxy después de que Client ya haya intentado cargar la descripción del servicio.
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 es la URL real de la descripción del servicio. Si ese servicio y sus importaciones son accesibles públicamente y se permiten proxies públicos, la lista de proxies HTTP ofrece candidatos para las URL de proxy de la sesión. Mantenga viva la sesión configurada para las operaciones SOAP posteriores y ciérrela cuando termine ese trabajo.
Transport.timeout controla la carga de WSDL y XSD. operation_timeout controla las solicitudes HTTP de las operaciones del servicio. Por eso, un tiempo de espera de metadatos durante la construcción del Client es una etapa distinta de una llamada a método que expira más tarde.
En este ejemplo, la integración con el entorno de Requests sigue activa. Si los valores de proxy del entorno entran en conflicto con una ruta requerida explícitamente, use session.trust_env=False y proporcione explícitamente el paquete CA y la configuración de autenticación necesarios.
Compruebe la URL del documento importado cuando la inicialización siga fallando. Un WSDL de nivel superior puede cargarse correctamente mientras un esquema importado usa otro nombre de host o protocolo de destino.