Zeep a besoin du proxy avant de lire le WSDL
Créez la session Requests et le transport Zeep avant de construire un Client depuis un WSDL distant.
Construire un Client Zeep depuis un WSDL distant peut récupérer immédiatement ce document et ses imports. Configurez le transport d'abord, plutôt que de définir un proxy après que Client a déjà tenté de charger la description du service.
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 est l'URL réelle de la description du service. Si ce service et ses imports sont accessibles publiquement et que les proxys publics sont autorisés, la liste de proxys HTTP fournit des candidats pour les URL de proxy de la session. Gardez la session configurée active pour les opérations SOAP suivantes, puis fermez-la lorsque ce travail se termine.
Transport.timeout contrôle le chargement du WSDL et du XSD. operation_timeout contrôle les requêtes HTTP effectuées pour les opérations du service. Un délai d'attente des métadonnées pendant la construction du Client relève donc d'une autre étape qu'un appel de méthode qui expire plus tard.
Dans cet exemple, l'intégration à l'environnement de Requests reste active. Si les valeurs de proxy de l'environnement entrent en conflit avec une route explicitement requise, utilisez session.trust_env=False et fournissez explicitement le paquet CA et les réglages d'authentification nécessaires.
Vérifiez l'URL du document importé lorsque l'initialisation échoue encore. Un WSDL de premier niveau peut se charger correctement alors qu'un schéma importé utilise un autre nom d'hôte ou un autre protocole de destination.