You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Zeep在Python3中修改SOAP头与请求体遇TypeError问题求助

解决Zeep构建自定义SOAP Header时的TypeError问题

我帮你搞定这个问题,咱们一步步拆解错误原因并修正:

首先,触发TypeError的核心问题是:你定义的ComplexType已经直接包含了Username、Password、Reference三个元素,调用header()时不需要再套一层UsernameToken关键字参数。除此之外,还有命名空间指定、HTTP头配置的细节需要调整,下面是完整的修正方案:

步骤1:修正Settings配置

你原来的extra_http_headers用了集合且放的是XML命名空间,这是错误的。extra_http_headers用于设置HTTP请求头(比如Authorization、Content-Type),XML命名空间要在定义SOAP元素时单独指定:

from zeep import Client, Settings
from zeep.xsd import ComplexType, Element, String as xString

# 正确的Settings配置:关闭严格模式以兼容松散WSDL,开启大XML支持
settings = Settings(strict=False, xml_huge_tree=True)

步骤2:定义带命名空间的SOAP Header

原XML里的UsernameToken属于ns2命名空间,创建Element时必须用ns参数绑定这个命名空间:

# 替换成你实际的ns2命名空间地址
NS2 = "http://schemas...."

# 定义UsernameToken的复杂数据类型
username_token_type = ComplexType([
    Element('Username', xString()),
    Element('Password', xString()),
    Element('Reference', xString()),
])

# 创建带ns2命名空间的Header元素
header = Element('UsernameToken', username_token_type, ns=NS2)

步骤3:生成正确的Header值

直接传递Username、Password、Reference三个参数即可,不需要嵌套UsernameToken键:

header_value = header(
    Username='__USERNAME__',
    Password='__PASSWORD__',
    Reference='__REFERENCE__'
)

步骤4:发起SOAP请求并附加Header

调用服务方法时,通过_soapheaders参数把自定义Header传入:

wsdl = 'https://.......?wsdl'
client = Client(wsdl=wsdl, settings=settings)

# 调用requestAd方法并带上自定义SOAP Header
response = client.service.requestAd(_soapheaders=[header_value])

验证生成的XML结构

这样配置后,Zeep生成的SOAP请求会完全匹配你期望的结构:

return (<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www...." xmlns:ns2="http://schemas....">
<SOAP-ENV:Header>
<ns2:UsernameToken>
<Username>__USERNAME__</Username>
<Password>__PASSWORD__</Password>
<Reference>__REFERENCE__</Reference>
</ns2:UsernameToken>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:requestAd/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
)

内容的提问来源于stack exchange,提问作者Toni Garcia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:22:56