Zeep braucht den Proxy, bevor es die WSDL liest
Erstellen Sie die Requests-Session und das Zeep-Transport-Objekt, bevor Sie einen Client aus einer entfernten WSDL bauen.
Beim Erstellen eines Zeep-Clients aus einer entfernten WSDL kann dieses Dokument sofort geladen werden, samt seiner Importe. Konfigurieren Sie das Transport-Objekt zuerst, statt einen Proxy erst zu setzen, nachdem der Client schon versucht hat, die Dienstbeschreibung zu laden.
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 ist die eigentliche URL der Dienstbeschreibung. Wenn dieser Dienst und seine Importe öffentlich erreichbar sind und öffentliche Proxys erlaubt sind, liefert die HTTP-Proxy-Liste Kandidaten für die Proxy-URLs der Session. Halten Sie die konfigurierte Session für weitere SOAP-Operationen aktiv und schließen Sie sie, wenn diese Arbeit endet.
Transport.timeout steuert das Laden von WSDL und XSD. operation_timeout steuert HTTP-Anfragen für Dienstoperationen. Ein Metadaten-Timeout beim Erstellen des Clients ist daher eine andere Phase als ein später ablaufender Methodenaufruf.
Die Umgebungsintegration von Requests bleibt in diesem Beispiel aktiv. Wenn Proxy-Werte aus der Umgebung mit einer ausdrücklich benötigten Route kollidieren, verwenden Sie session.trust_env=False und geben Sie das nötige CA-Bundle sowie Authentifizierungseinstellungen ausdrücklich an.
Prüfen Sie die URL des importierten Dokuments, wenn die Initialisierung weiterhin fehlschlägt. Eine WSDL der obersten Ebene kann erfolgreich geladen werden, während ein importiertes Schema einen anderen Hostnamen oder ein anderes Zielprotokoll verwendet.