Hola a todos, estoy peleándome con el cliente SOAP desde Python y me encuentro con que no consigo generar correctamente el XML que se envía.
Os pongo un ejemplo de código que se debería generar (el correcto extraído del SOAP UI, obviamente cambiando los datos de credenciales)
Codigo en Python (Django) que genera la peticion SOAP
XML Generado por Python
<soap-env:Envelope xmlns:soap-env="http://www.w3.org/2003/05/soap-envelope">
<soap-env:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>developer_user</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">miPasswordEnTextoPlano</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soap-env:Header>
<soap-env:Body>
<ns0:consultarCodiProjecteMDMInput xmlns:ns0="https://services.dev.midominio.edu/soa/servei/MDMCodisProjectes/v01_00">
<ns0:idMDM>100045976</ns0:idMDM>
</ns0:consultarCodiProjecteMDMInput>
</soap-env:Body>
</soap-env:Envelope>
Estoy mirandome el PDF https://buildmedia.readthedocs.org/media/pdf/python-zeep/master/python-zeep.pdf donde en la pagina 18 indica lo siguiente
from zeep import xsd
header = xsd.Element(
'{http://test.python-zeep.org}auth',xsd.ComplexType([
xsd.Element(
'{http://test.python-zeep.org}username',
xsd.String()),
])
)
header_value = header(username='mvantellingen')
client.service.Method(_soapheaders=[header_value])
pero no termino de ver exactamente como he de poner los datos para que se traduzca al XML que debería ser, ayer intente hacer una prueba pero nanai.
- Añadir en el header el formato correcto del UsernameToken y la cabecera headerMDMPeticio con todo el contenido dentro.
- Añadir en el body el usosDada con todo su contenido.
Si le hago una petición a saco, metiendo todo el XML en una String y poniendo los valores que me interesan, funciona. Pero claro la idea es usar zeep para generar las peticiones.