首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Ontario Health EBS MCEDT WSDL(SOAP) webservice的Python Zeep客户端

使用Ontario Health EBS MCEDT WSDL(SOAP) webservice的Python Zeep客户端
EN

Stack Overflow用户
提问于 2020-03-18 05:15:03
回答 1查看 146关注 0票数 1

我一直在尝试使用Zeep来生成SOAP信封,用于调用以下WSDL中的方法:

https://ws.conf.ebs.health.gov.on.ca:1443/EDTService/EDTService?wsdl

到目前为止,我已经想出了这个:

代码语言:javascript
复制
from zeep import Client, xsd
from zeep.transports import Transport
from requests import Session
import urllib3
from zeep.plugins import HistoryPlugin

urllib3.disable_warnings()

session = Session()
session.verify = False
transport = Transport(session=session)

history = HistoryPlugin()
client = Client(wsdl='https://ws.conf.ebs.health.gov.on.ca:1443/EDTService/EDTService?wsdl', 
transport=transport, plugins=[history])

# client.wsdl.dump()

ebsheader = xsd.Element(
    '{http://ebs.health.ontario.ca/}EBS',
    xsd.ComplexType([
       xsd.Attribute(
          'Id',xsd.String()
       ),
       xsd.Element(
           'SoftwareConformanceKey', xsd.String()
       ),
       xsd.Element(
           'AuditId', xsd.String()
       ),
   ])
)
headers = []
headers.append(ebsheader('id-1','software-key-here','unique-id'))

response = client.service.getTypeList(_soapheaders=headers)

我还远没有生成一个看起来像API规范中提供的示例的信封。

作为SOAP/WSDL的新手,我很难理解超级复杂的API规范http://www.health.gov.on.ca/en/pro/publications/ohip/docs/techspec_ebs.pdf

有没有人可以使用Zeep来使用这个API?

EN

回答 1

Stack Overflow用户

发布于 2020-03-19 15:14:56

如果您查看zeep的文档,就会发现它使得调用soap服务方法变得非常容易。

首先,您需要检查wsdl:python -mzeep https://ws.conf.ebs.health.gov.on.ca:1443/EDTService/EDTService?wsdl

然后您可以在其中看到getTypelist的定义(考虑第一个绑定):

代码语言:javascript
复制
getTypeList(_soapheaders={ebsrequest_header: ns0:ebs_header, msarequest_header: 
ns3:msa_header, idprequest_header: ns2:idp_header}) -> return: ns1:typeListResult

所以你需要创建ebs_header, msa_header & idp_header。为每个组件创建一个工厂:

代码语言:javascript
复制
factory0 = client.type_factory('ns0')
factory2 = client.type_factory('ns2')
factory3 = client.type_factory('ns3')

然后创建以下每个元素:

代码语言:javascript
复制
ebs_header = factory0.ebs_header(SoftwareConformanceKey="key", AuditId="id")
print(ebs_header)

msa_header = factory3.msa_header(ServiceUserMUID="muid", UserID="uid")
print(msa_header)

idp_header = factory2.idp_header(ServiceUserMUID="muid")
print(idp_header)

# then create the _soapheaders
headers = {
    'ebsrequest_header' : ebs_header,
    'msarequest_header' : msa_header,
    'idprequest_header' : idp_header
    }

#finally call the method
response = client.service.getTypeList(_soapheaders=headers)

# you can see the sent request from plugin:
print(history.last_sent)

请注意,我试图运行代码,但我得到了连接错误。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60730325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档