【发布时间】:2017-03-22 21:37:42
【问题描述】:
我想通过 zeep 库将“复杂”标头传递给 SOAP 服务
它应该是这样的
<soapenv:Header>
<something:myVar1>FOO</something:myVar1>
<something:myVar2>JAM</something:myVar2>
</soapenv:Header>
我猜我这样发送标头成功了
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])
但我不知道如何使用 XSD 在我的 Header 中声明和传递命名空间“某物”。
有什么帮助吗?
提前致谢。
最好的问候
如文档中所述
http://docs.python-zeep.org/en/master/headers.html
“另一种选择是传递一个 lxml Element 对象。如果 wsdl 没有定义一个 soap 头但服务器确实期望它,这通常很有用。”
这是我的情况,所以我尝试了
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)
但我得到:ComplexType() 得到了一个意外的关键字参数 u'soapenv:Header'。签名:``
【问题讨论】:
标签: python-3.x soap zeep