gpt4 book ai didi

python-3.x - Python - Zeep SOAP 复杂头

转载 作者:行者123 更新时间:2023-12-01 06:59:02 24 4
gpt4 key购买 nike

我想将“复杂” header 传递给带有 zeep 库的 SOAP 服务

这是它应该是什么样子

 <soapenv:Header>
<something:myVar1>FOO</something:myVar1>
<something:myVar2>JAM</something:myVar2>
</soapenv:Header>

我想我成功地以这种方式发送了 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 元素对象。如果 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'。签名:``

最佳答案

我最近遇到了这个问题,这是我解决它的方法。

假设您有一个“安全” header ,如下所示...

<env:Header>
<Security>
<UsernameToken>
<Username>__USERNAME__</Username>
<Password>__PWD__</Password>
</UsernameToken>
<ServiceAccessToken>
<AccessLicenseNumber>__KEY__</AccessLicenseNumber>
</ServiceAccessToken>
</Security>
</env:Header>

为了在 zeep 客户端的请求中发送此 header ,您需要执行以下操作:
header = zeep.xsd.Element(
'Security',
zeep.xsd.ComplexType([
zeep.xsd.Element(
'UsernameToken',
zeep.xsd.ComplexType([
zeep.xsd.Element('Username',zeep.xsd.String()),
zeep.xsd.Element('Password',zeep.xsd.String()),
])
),
zeep.xsd.Element(
'ServiceAccessToken',
zeep.xsd.ComplexType([
zeep.xsd.Element('AccessLicenseNumber',zeep.xsd.String()),
])
),
])
)

header_value = header(UsernameToken={'Username':'test_user','Password':'testing'},UPSServiceAccessToken={'AccessLicenseNumber':'test_pwd'})

client.service.method_name_goes_here(
_soapheaders=[header_value],#other method data goes here
)

关于python-3.x - Python - Zeep SOAP 复杂头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42963114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com