Come faccio a creare un tipo non standard con SOAPpy?
-
02-07-2019 - |
Domanda
Sto chiamando un servizio web WSDL da Python usando SOAPpy . La chiamata che devo fare è il metodo Auth_login . Questo ha 2 argomenti: il primo, una stringa è la chiave API; il secondo, un tipo personalizzato contenente nome utente e password . Il tipo personalizzato si chiama Auth_credentialsData che contiene 2 valori come punti, uno per il nome utente e uno per la password. Come posso creare questo tipo personalizzato usando SOAPpy? Ho provato a passare un elenco e un dizionario, nessuno dei quali funziona.
Codice finora:
from SOAPpy import WSDL
wsdlUrl = 'https://ws.pingdom.com/soap/PingdomAPI.wsdl'
client = WSDL.Proxy(wsdlUrl)
Ho provato entrambi:
credentials = ['email@example.com', 'password']
client.Auth_login('key', credentials)
e
credentials = {'username': 'email@example.com', 'password': 'passsword'}
client.Auth_login('key', credentials)
entrambi danno un errore di autenticazione fallita.
Soluzione
Il metodo migliore è usare il modulo soap ZSI che ti permette di prendere un file WDSL e trasformarlo in classi e metodi che puoi usare per chiamarlo. La documentazione online è sul loro sito web ma la documentazione più recente è più facilmente reperibile nella fonte pacchetto. Se installi in Debian / Ubuntu (nome del pacchetto python-zsi) la documentazione è in / usr / share / doc / python-zsi in una coppia di PDF che puoi trovare lì.