Zeep پیش از خواندن WSDL به پروکسی نیاز دارد
پیش از ساختن Client از یک WSDL راه دور، نشست Requests و Transport مربوط به Zeep را بسازید.
ساختن یک Client از Zeep از WSDL راه دور میتواند همان لحظه آن سند و importهایش را واکشی کند. ابتدا 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 همان نشانی واقعی توصیف سرویس است. اگر آن سرویس و importهایش بهصورت عمومی در دسترس باشند و پروکسیهای عمومی مجاز باشند، فهرست پروکسی HTTP نامزدهایی برای نشانیهای پروکسی نشست فراهم میکند. نشست پیکربندیشده را برای عملیاتهای بعدی SOAP زنده نگه دارید و وقتی آن کار تمام شد آن را ببندید.
Transport.timeout بارگذاری WSDL و XSD را کنترل میکند. operation_timeout درخواستهای HTTP مربوط به عملیاتهای سرویس را کنترل میکند. بنابراین اتمام زمان فراداده هنگام ساخت Client مرحلهای متفاوت از اتمام زمان یک فراخوانی متد در ادامه است.
در این نمونه، یکپارچگی محیطی Requests فعال میماند. اگر مقادیر پروکسی محیط با مسیری که صریحاً لازم است تعارض داشته باشد، از session.trust_env=False استفاده کنید و بستهٔ CA و تنظیمات احراز هویت لازم را صریحاً فراهم کنید.
اگر مقداردهی اولیه هنوز شکست میخورد، نشانی URL سند واردشده را بررسی کنید. یک WSDL سطح بالا میتواند با موفقیت بارگذاری شود در حالی که یک schema واردشده از نام میزبان یا پروتکل مقصد دیگری استفاده میکند.