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

如何使用Python Zeep库正确格式化构造SOAP请求

问题说明

当前使用的WSDL地址:http://sprws.sprich.com/sprws/StockCheck.php?wsdl,SoapUI中构造的标准请求格式如下:

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:stoc="http://sprws.sprich.com/sprws/StockCheck.php?wsdl">
   <soapenv:Header/>
   <soapenv:Body>
      <stoc:StockCheck soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <input xsi:type="stoc:StockCheckInputs">
            <!--以下10个参数可按任意顺序传入-->
            <GroupCode xsi:type="xsd:string">[Removed]</GroupCode>
            <UserID xsi:type="xsd:string">[Removed]</UserID>
            <Password xsi:type="xsd:string">[Removed]</Password>
            <Action xsi:type="xsd:string">F</Action>
            <CustNumber xsi:type="xsd:string"></CustNumber>
            <DcNumber xsi:type="xsd:string"></DcNumber>
            <ItemNumber xsi:type="xsd:string">HAM105007CT</ItemNumber>
            <SortBy xsi:type="xsd:string">A</SortBy>
            <MinInFullPacks xsi:type="xsd:string"></MinInFullPacks>
            <AvailableOnly xsi:type="xsd:string">Y</AvailableOnly>
         </input>
      </stoc:StockCheck>
   </soapenv:Body>
</soapenv:Envelope>

原有测试代码的问题是没有按照接口要求把参数包裹在input节点下,直接平铺传参导致请求结构不符合WSDL定义。

正确调用方法

核心逻辑

接口的StockCheck方法仅接收一个名为input的复合类型参数,所有查询字段都要作为这个复合类型的属性传入,不能直接把字段平铺传给方法。

可直接运行的代码

from zeep import Client

# 初始化SOAP客户端
wsdl_url = 'http://sprws.sprich.com/sprws/StockCheck.php?wsdl'
client = Client(wsdl=wsdl_url)

# 按接口要求构造input节点的所有参数,空字段传空字符串即可
query_params = {
    "GroupCode": "[Removed]",
    "UserID": "[Removed]",
    "Password": "[Removed]",
    "Action": "F",
    "CustNumber": "",
    "DcNumber": "",
    "ItemNumber": "HAM105007CT",
    "SortBy": "A",
    "MinInFullPacks": "",
    "AvailableOnly": "Y"
}

# 调用接口,显式给input形参传构造好的参数字典
resp = client.service.StockCheck(input=query_params)
print(resp)

调试技巧

  • 如果不确定接口的参数结构,可以直接在Python交互环境执行print(client.service.StockCheck),Zeep会自动打印该方法的参数签名、类型要求,对照传参即可。
  • 如果请求返回异常,可以开启调试日志查看实际发出的SOAP报文,和SoapUI的标准请求对比结构差异:
import logging
import zeep

logging.basicConfig(level=logging.INFO)
zeep.wsdl.utils.logger.setLevel(logging.DEBUG)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:12:45