Dựng một Client Zeep từ WSDL từ xa có thể ngay lập tức tải tài liệu đó và các import của nó. Hãy cấu hình Transport trước, thay vì đặt proxy sau khi Client đã cố tải mô tả dịch vụ.

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 là URL thực tế của mô tả dịch vụ. Nếu dịch vụ đó và các import của nó truy cập được công khai và proxy công cộng được phép, danh sách proxy HTTP cung cấp các ứng viên cho URL proxy của phiên. Giữ phiên đã cấu hình sống cho các thao tác SOAP tiếp theo, rồi đóng nó khi công việc đó kết thúc.

Transport.timeout kiểm soát việc tải WSDL và XSD. operation_timeout kiểm soát các yêu cầu HTTP cho thao tác dịch vụ. Vì vậy, hết thời gian chờ siêu dữ liệu khi dựng Client là một giai đoạn khác với việc một lời gọi phương thức hết thời gian chờ sau đó.

Trong ví dụ này, tích hợp môi trường của Requests vẫn hoạt động. Nếu giá trị proxy từ môi trường xung đột với một tuyến đường được yêu cầu rõ ràng, hãy dùng session.trust_env=False và cung cấp rõ ràng gói CA cùng các thiết lập xác thực cần thiết.

Kiểm tra URL của tài liệu được import khi quá trình khởi tạo vẫn thất bại. Một WSDL cấp cao nhất có thể tải thành công trong khi một schema được import dùng tên máy chủ hoặc giao thức đích khác.

Bài viết liên quan