Je suis en train d'accéder à un service Web SOAP en utilisant ZeepComment se conformer à la politique définie dans WSDL
Il y a un public WSDL, et un testing WSDL (a un certificat auto-signé)
Mon code pour tester (à partir du site de test) est:
from requests import Session
from zeep import Client
from zeep.transports import Transport
from zeep.wsse.username import UsernameToken
import xml.dom.minidom
WS_USER_NAME = '<username>'
WS_PASSWORD = '<password>'
WS_WSDL = 'https://pre.ipddb.org/WS/Services/IpdDownloadService.svc?wsdl'
session = Session()
session.verify = False
transport = Transport(session=session,
operation_timeout=10)
client = Client(wsdl=WS_WSDL,
wsse=UsernameToken(WS_USER_NAME, WS_PASSWORD),
transport=transport)
with client.options(raw_response=True):
response = client.service.Search(strNames='Rick Astley')
xml = xml.dom.minidom.parseString(response._content)
print xml.toprettyxml()
Ma réponse revient comme:
<?xml version="1.0" ?>
<s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<s:Header>
<a:Action s:mustUnderstand="1">http://www.w3.org/2005/08/addressing/soap/fault</a:Action>
<a:RelatesTo>urn:uuid:5ffbeb15-913b-41ec-a2ef-556c131c07eb</a:RelatesTo>
</s:Header>
<s:Body>
<s:Fault>
<s:Code>
<s:Value>s:Sender</s:Value>
<s:Subcode>
<s:Value xmlns:a="http://schemas.xmlsoap.org/ws/2005/02/sc">a:BadContextToken</s:Value>
</s:Subcode>
</s:Code>
<s:Reason>
<s:Text xml:lang="es-ES">The message could not be processed. This is most likely because the action 'https://www.ipddb.org/ws/IpdDownloadService/Search' is incorrect or because the message contains an invalid or expired security context token or because there is a mismatch between bindings. The security context token would be invalid if the service aborted the channel due to inactivity. To prevent the service from aborting idle sessions prematurely increase the Receive timeout on the service endpoint's binding.</s:Text>
</s:Reason>
</s:Fault>
</s:Body>
</s:Envelope>
J'ai reçu un nom d'utilisateur et un mot de passe des propriétaires du service web, donc je sais que je devrai le fournir, mais il doit y avoir quelque chose d'autre qui me manque. Je crois que cela a à voir avec la politique définie dans le WSDL, mais le service web ne fournit rien en termes de documentation.
Je suis nouveau à SOAP, mais est-ce qu'il y en a assez dans le WSDL pour que je puisse comprendre ce dont ils ont besoin pour se conformer à la politique? Puis-je utiliser Zeep pour remplir toutes les politiques?
Ai-je besoin de plus d'informations de la part des personnes chargées de la maintenance du service Web?
J'ai commencé avec [SoapUI] (https://www.soapui.org) et j'ai eu la même erreur. Mon but final est d'utiliser Zeep, mais même avec SoapUI j'obtiens cette erreur – tkwargs