Το Zeep χρειάζεται το proxy πριν διαβάσει το WSDL
Δημιουργήστε τη συνεδρία Requests και το Transport του Zeep πριν φτιάξετε ένα Client από απομακρυσμένο WSDL.
Η δημιουργία ενός Zeep Client από απομακρυσμένο WSDL μπορεί να κατεβάσει αμέσως αυτό το έγγραφο και τα imports του. Ρυθμίστε πρώτα το Transport, αντί να ορίσετε proxy αφού ο 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 της περιγραφής της υπηρεσίας. Αν αυτή η υπηρεσία και τα imports της είναι δημόσια προσβάσιμα και επιτρέπονται δημόσια proxy, η λίστα proxy HTTP παρέχει υποψήφια για τα URL proxy της συνεδρίας. Κρατήστε τη ρυθμισμένη συνεδρία ενεργή για τις επόμενες λειτουργίες SOAP και κλείστε την όταν τελειώσει αυτή η εργασία.
Το Transport.timeout ελέγχει τη φόρτωση WSDL και XSD. Το operation_timeout ελέγχει τα αιτήματα HTTP για τις λειτουργίες της υπηρεσίας. Επομένως ένα timeout μεταδεδομένων κατά τη δημιουργία του Client είναι διαφορετικό στάδιο από ένα timeout κλήσης μεθόδου αργότερα.
Σε αυτό το παράδειγμα η ενσωμάτωση περιβάλλοντος του Requests παραμένει ενεργή. Αν οι τιμές proxy του περιβάλλοντος συγκρούονται με μια ρητά απαιτούμενη διαδρομή, χρησιμοποιήστε session.trust_env=False και δώστε ρητά το απαιτούμενο πακέτο CA και τις ρυθμίσεις ελέγχου ταυτότητας.
Ελέγξτε το URL του εισαγόμενου εγγράφου όταν η αρχικοποίηση εξακολουθεί να αποτυγχάνει. Ένα WSDL ανώτατου επιπέδου μπορεί να φορτωθεί με επιτυχία ενώ ένα εισαγόμενο σχήμα χρησιμοποιεί άλλο όνομα κεντρικού υπολογιστή ή πρωτόκολλο προορισμού.