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