【问题标题】:How do I properly format a SOAP request using Python's Zeep library?如何使用 Python 的 Zeep 库正确格式化 SOAP 请求?
【发布时间】:2022-06-17 00:19:59
【问题描述】:

请不要只链接到文档:https://docs.python-zeep.org/en/master/in_depth.html

如果我还没有用尽我对文档的理解,我就不会在这里发帖。

这是我正在使用的 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">
            <!--You may enter the following 10 items in any order-->
            <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>

如何在 Python 中重新创建它?我对 SOAP 的经验很少。
到目前为止,我有:

    from zeep import Client
    from zeep import xsd
    client = Client(wsdl='http://sprws.sprich.com/sprws/StockCheck.php?wsdl')
    result = client.service.StockCheck(GroupCode='[Removed]', UserID='[Removed]', Password='[Removed]', ItemNumber='HAM105007CT', Action='F', SortBy='A')
    print(result)

任何帮助将不胜感激。如果有更好的方法在 Pyhohn 中执行 SOAP 请求,请不要犹豫告诉我。我目前正在使用请求库来做许多其他事情。

我想要获取特定商品编号的库存。但是怎么不知道用来提交我的请求的语法。

【问题讨论】:

  • 如果你运行python -mzeep http://sprws.sprich.com/sprws/StockCheck.php?wsdl StockCheck 方法,你会得到什么方法签名? WSDL 链接没有为我打开。
  • 奇怪的是它不会打开。我第一次运行 -mzeep 时遇到错误,然后它才开始工作。我也使用“请求”库进行这项工作,即使我得到了我需要的数据,我也得到了 500 响应?
  • 在这种情况下,我不确定您所说的“方法签名”是什么意思。我假设您的意思是列出了哪些“服务”。服务:StockCheck 端口:StockCheckPort (Soap11Binding: {sprws.sprich.com/sprwas/StockCheck.php?wsdl}StockCheckBinding) 操作:StockCheck(input: ns0:StockCheckInputs) -> 返回:ns0:StockCheckRsults

标签: python soap zeep


【解决方案1】:

我在尝试打开 WSDL 时收到 ERR_CONNECTION_TIMED_OUT 错误,但根据您发布的评论,操作方法如下:

StockCheck(input: ns0:StockCheckInputs) -> return: ns0:StockCheckRsults

但你正试图拨打这样的电话:

client.service.StockCheck(GroupCode='[Removed]', UserID='[Removed]', Password='[Removed]', ItemNumber='HAM105007CT', Action='F', SortBy='A')

所有这些参数都需要封装在 ns0:StockCheckInputs 类型的对象中,调用才能正常工作。

此外,服务和 WSDL 需要可访问,以防我不是唯一一个无法打开该地址的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 2014-05-11
    • 2019-02-02
    • 1970-01-01
    相关资源
    最近更新 更多