如何使用Python zeep从具有多个绑定的Python Soap客户端访问所有Webservice方法

问题描述

我必须使用SOAP服务中的数据,这对我来说是一项新技术。我使用以下代码从服务器连接:

from requests import Session
from requests.auth import HTTPBasicAuth
from zeep import Client
from zeep.transports import Transport

wsdl= 'my_service.com/MEX?wsdl'
username = 'john_doe'
password = 'password'

session = Session()
session.auth = HTTPBasicAuth(username,password)
transport = Transport(session=session)
client = Client(wsdl=wsdl,transport=transport)

使用SoapUi软件并连接到该服务器,我意识到它具有三个绑定,每个绑定都有很多Web服务。但是,使用Python,我只能通过第一个绑定访问WebServices(通过client.service)。我想知道如何从另外两个绑定访问Webservice方法

OBS:client.wsdl.bindings返回一个dict,将包含在SoapUI上看到的绑定名称的某些URL映射到Soap11Binding实例。

解决方法

默认情况下,Zeep拾取WSDL中的第一个绑定。此绑定可通过以下方式获得 client.service。要使用特定的绑定,可以在客户端对象上使用bind()方法 示例代码:

service2 = client.bind('SecondService','Port12')
service2.someOperation(arg1='abc',arg2=2)