首页 > 解决方案 > 如何使用 Python zeep 从具有多个绑定的 Python Soap 客户端访问所有 Web 服务方法

问题描述

我必须使用来自 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,我只能访问 Web 服务(通过 client.service)进行第一次绑定。我想知道如何从另外两个绑定中访问 Webservice 方法。

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

标签: pythonweb-servicessoapwsdlzeep

解决方案


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

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

推荐阅读