Zeep potrzebuje proxy, zanim odczyta WSDL
Utwórz sesję Requests i Zeep Transport przed zbudowaniem Client z zdalnego WSDL.
Zbudowanie Zeep Client ze zdalnego WSDL może od razu pobrać ten dokument i jego importy. Skonfiguruj najpierw Transport, zamiast ustawiać proxy po tym, jak Client już próbował wczytać opis usługi.
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 to rzeczywisty URL opisu usługi. Jeśli ta usługa i jej importy są publicznie dostępne, a publiczne proxy są dozwolone, lista proxy HTTP dostarcza kandydatów do adresów URL proxy sesji. Utrzymuj skonfigurowaną sesję aktywną dla kolejnych operacji SOAP, a następnie zamknij ją, gdy ta praca się skończy.
Transport.timeout kontroluje wczytywanie WSDL i XSD. operation_timeout kontroluje żądania HTTP wykonywane dla operacji usługi. Limit czasu metadanych podczas budowania Client to więc inny etap niż późniejszy limit czasu wywołania metody.
W tym przykładzie integracja ze środowiskiem biblioteki Requests pozostaje aktywna. Jeśli wartości proxy ze środowiska kolidują z jawnie wymaganą trasą, użyj session.trust_env=False i jawnie podaj wymagany pakiet CA oraz ustawienia uwierzytelniania.
Sprawdź URL importowanego dokumentu, gdy inicjalizacja nadal się nie udaje. WSDL najwyższego poziomu może załadować się poprawnie, podczas gdy importowany schemat używa innej nazwy hosta lub innego protokołu docelowego.