Costruire un Client Zeep da un WSDL remoto può scaricare subito quel documento e i suoi import. Configurate prima il Transport, invece di impostare un proxy dopo che Client ha già provato a caricare la descrizione del servizio.

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 è l'URL effettivo della descrizione del servizio. Se quel servizio e i suoi import sono raggiungibili pubblicamente e i proxy pubblici sono consentiti, l'elenco di proxy HTTP fornisce candidati per gli URL proxy della sessione. Mantenete attiva la sessione configurata per le successive operazioni SOAP, poi chiudetela quando quel lavoro termina.

Transport.timeout controlla il caricamento di WSDL e XSD. operation_timeout controlla le richieste HTTP effettuate per le operazioni del servizio. Un timeout dei metadati durante la costruzione del Client è quindi una fase diversa da una chiamata a metodo che scade più tardi.

In questo esempio l'integrazione con l'ambiente di Requests resta attiva. Se i valori proxy dell'ambiente sono in conflitto con una rotta richiesta esplicitamente, usate session.trust_env=False e fornite esplicitamente il bundle CA e le impostazioni di autenticazione necessarie.

Controllate l'URL del documento importato quando l'inizializzazione fallisce ancora. Un WSDL di primo livello può caricarsi correttamente mentre uno schema importato usa un altro nome host o protocollo di destinazione.

Articoli correlati