Zeep потребує проксі до читання WSDL
Створіть сесію Requests і Transport Zeep перед тим, як будувати Client з віддаленого WSDL.
Створення Zeep Client із віддаленого WSDL може одразу завантажити цей документ і його імпорти. Налаштуйте Transport заздалегідь, а не задавайте проксі після того, як Client уже спробував завантажити опис сервісу.
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 — це фактичний URL опису сервісу. Якщо цей сервіс та його імпорти загальнодоступні й публічні проксі дозволені, список HTTP-проксі надає кандидатів для проксі-URL сесії. Тримайте налаштовану сесію активною для наступних операцій SOAP, а потім закрийте її, коли ця робота завершиться.
Transport.timeout керує завантаженням WSDL і XSD. operation_timeout керує HTTP-запитами для операцій сервісу. Тому тайм-аут метаданих під час створення Client — це інший етап, ніж тайм-аут виклику методу пізніше.
У цьому прикладі інтеграція з середовищем Requests залишається активною. Якщо значення проксі із середовища конфліктують з явно потрібним маршрутом, використайте session.trust_env=False і явно вкажіть потрібний пакет CA та налаштування автентифікації.
Перевірте URL імпортованого документа, якщо ініціалізація все ще не вдається. WSDL верхнього рівня може успішно завантажитися, тоді як імпортована схема використовує інше ім'я хоста або протокол призначення.