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

如何使用Python Zeep为SOAP请求元素设置属性

使用Python Zeep构造带属性的SOAP请求

嘿,我来帮你搞定用Zeep构造这个SOAP请求的问题!要设置XML元素的属性,Zeep提供了专门的_kwargs参数来处理,下面一步步给你演示具体实现:

1. 初始化Zeep客户端

首先导入Zeep并创建SOAP客户端,替换成你的实际WSDL地址:

from zeep import Client

# 替换为你的WSDL地址
client = Client('http://your-wsdl-endpoint?wsdl')

2. 构造带属性的<header>元素

你的<header>元素带有requestId和usageMode两个属性,同时还有子元素。Zeep中需要通过类型对象来创建带属性的元素,步骤如下:

  • 先通过client.get_type()获取WSDL中定义的header类型(类型名称需要根据你的WSDL实际定义调整,比如可能是ns0:header)
  • 创建对象时,用_kwargs参数传递属性键值对,其余参数对应子元素内容

示例代码:

# 获取header对应的复杂类型(请根据你的WSDL调整类型名称)
HeaderType = client.get_type('ns0:header')

# 创建带属性的header对象
request_header = HeaderType(
    systemName='YourSystemName',  # 子元素内容
    timestamp='2024-05-20T14:30:00',  # 格式建议符合WSDL要求的ISO时间格式
    userName='YourUserName',
    _kwargs={
        'requestId': 'UNIQUE_REQUEST_ID_001',  # 设置requestId属性
        'usageMode': 'PRODUCTION'  # 设置usageMode属性
    }
)

小提示:如果不确定类型名称,可以运行client.wsdl.dump()打印WSDL的所有类型和方法定义,找到对应的header类型。

3. 构造请求的<body>部分

<body>里的<fetchProperty>支持重复多次,所以可以构造一个列表来传递多个属性名称:

# 构造多个fetchProperty项
fetch_properties = [
    {'propertyName': 'UserEmail'},
    {'propertyName': 'UserRole'},
    {'propertyName': 'UserStatus'}
]

# 构造body内容
request_body = {
    'fetchProperty': fetch_properties,
    'id': 'TARGET_RECORD_ID'  # 替换为实际的ID值
}

4. 发起SOAP请求

最后调用对应的SOAP方法(这里假设方法名为getRequest),传入构造好的header和body:

# 调用SOAP服务方法
response = client.service.getRequest(
    header=request_header,
    body=request_body
)

# 打印响应结果
print(response)

额外注意事项

  • 如果<fetchProperty>也是WSDL中定义的复杂类型,同样需要用client.get_type()创建对象,而不是直接用字典
  • 确保所有参数的格式和取值符合WSDL的约束(比如timestamp的格式、usageMode的可选值等)
  • 若遇到命名空间问题,可以在创建客户端时指定命名空间,或者在获取类型时明确指定命名空间前缀

内容的提问来源于stack exchange,提问作者Piotr W.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:43:19