Python - Zeep SOAP Complex Header
Me gustaría pasar el encabezado "complejo" a un servicio SOAP con la biblioteca zeep
Así es como debería verse
<soapenv:Header>
<something:myVar1>FOO</something:myVar1>
<something:myVar2>JAM</something:myVar2>
</soapenv:Header>
Supongo que logro enviar un encabezado de esta manera
header = xsd.Element(
'{http://urlofthews}Header',
xsd.ComplexType([
xsd.Element(
'{http://urlofthews}myVar1',
xsd.String()),
xsd.Element(
'{http://urlofthews}myVar2',
xsd.String())
])
)
header_value = header(myVar1='FOO',myVar2='JAM')
print (header_value)
datasoap=client.service.UserRessourcesCatalog(requete,_soapheaders=[header_value])
Pero no entiendo cómo declarar y pasar el espacio de nombres "algo" en mi encabezado con el XSD.
Alguna ayuda ?
Gracias por adelantado.
Atentamente
Como se menciona en la documentación
http://docs.python-zeep.org/en/master/headers.html
"Otra opción es pasar un objeto Elemento lxml. Esto generalmente es útil si wsdl no define un encabezado de jabón pero el servidor sí lo espera".
cual es mi caso así que lo intenté
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
ET.register_namespace('something', 'http://urlofthews')
headerXML = ET.Element("soapenv:Header")
var1 = ET.SubElement(headerXML, "something:myVar1")
var1.text = "FOO"
var2 = ET.SubElement(headerXML, "something:myVar2")
var2.text = "JAM"
headerDict=xmltodict.parse(ET.tostring(headerXML))
print (json.dumps(headerDict))
datasoap=client.service.UserRessourcesCatalog(requete,_soapheaders=headerDict)
Pero obtengo: ComplexType () tiene un argumento de palabra clave inesperado u'soapenv: Header '. Firma: ``