python-3.x – Python – Zeep SOAP复杂标题

python-3.x – Python – Zeep SOAP复杂标题,第1张

概述我想将“Complex”Header传递给带有zeep库的SOAP服务 这是它应该是什么样子 <soapenv:Header> <something:myVar1>FOO</something:myVar1> <something:myVar2>JAM</something:myVar2> </soapenv:Header> 我想我成功地以这种方式发送标题 header 我想将“Complex”header传递给带有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中声明并传递命名空间“something”.

任何帮助?

先谢谢.

最好的祝福

正如文档中提到的那样

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’.签名:“

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

假设您有一个“安全”标题,如下所示……

<env:header><Security>    <UsernameToken>        <Username>__USERname__</Username>        <Password>__PWD__</Password>    </UsernameToken>    <ServiceAccesstoken>                <AccesslicenseNumber>__KEY__</AccesslicenseNumber>    </ServiceAccesstoken></Security></env:header>

要在zeep客户端的请求中发送此标头,您需要执行以下 *** 作:

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.Element(                    'ServiceAccesstoken',zeep.xsd.ComplexType([                        zeep.xsd.Element('AccesslicenseNumber',])        )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复杂标题全部内容,希望文章能够帮你解决python-3.x – Python – Zeep SOAP复杂标题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1195148.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存