使用安大略健康EBS MCEDT WSDL(SOAP)Web服务的Python Zeep客户端

使用安大略健康EBS MCEDT WSDL(SOAP)Web服务的Python Zeep客户端,python,soap,wsdl,soap-client,zeep,Python,Soap,Wsdl,Soap Client,Zeep,我一直在尝试使用Zeep生成SOAP信封,用于调用以下WSDL中的方法: 到目前为止,我已经得出了以下结论: 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 = Sessi

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

到目前为止,我已经得出了以下结论:

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规范


有人能够使用Zeep使用这个API吗?

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

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

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

因此,您需要创建
ebs\u头、msa\u头和idp\u头
。为以下各项创建工厂:

factory0 = client.type_factory('ns0')
factory2 = client.type_factory('ns2')
factory3 = client.type_factory('ns3')
然后创建以下每个元素:

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)
请注意,我试图运行代码,但出现连接错误


希望这有帮助。

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

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

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

因此,您需要创建
ebs\u头、msa\u头和idp\u头
。为以下各项创建工厂:

factory0 = client.type_factory('ns0')
factory2 = client.type_factory('ns2')
factory3 = client.type_factory('ns3')
然后创建以下每个元素:

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)
请注意,我试图运行代码,但出现连接错误


希望这能有所帮助。

你到底想做什么?生成信封或您想调用该方法?@Tarique我想调用一个名为“getTypelist”的方法并最终“upload”如果答案有效,请接受答案或在尝试后提供反馈。@Tarique我尝试使用您建议的方式调用该方法,但结果是SSL错误。您实际想做什么?生成信封或要调用该方法?@Tarique我想调用一个名为“getTypelist”的方法并最终“upload”如果答案有效,请接受答案或在尝试后提供反馈。@Tarique我尝试使用您建议的方式调用该方法,但导致SSL错误