答案:python可通过zeep、suds-jy库或requests库调用SOAP接口。1、zeep安装后解析WSDL并调用远程方法;2、suds-jy适用于Python 3,直接调用服务;3、requests可手动构造SOAP信封发送POST请求。

如果您需要与基于SOAP协议的Web服务进行交互,Python可以通过特定的库来发送符合SOAP规范的xml请求并解析响应。以下是几种调用SOAP接口的方法和实际操作步骤:
一、使用zeep库调用SOAP接口
zeep是一个现代且功能强大的Python库,专用于处理SOAP协议的Web服务。它支持WSDL解析,并能自动生成客户端代码以便调用远程方法。
1、安装zeep库:pip install zeep
2、使用以下代码初始化客户端并调用服务:
立即学习“Python免费学习笔记(深入)”;
from zeep import Client
client = Client(‘http://example.com/service?wsdl’)
result = client.service.MethodName(param1=’value1′, param2=’value2′)
print(result)
二、使用suds-jy库调用SOAP接口
suds-jy是suds的一个维护分支,适用于Python 3环境,能够方便地与SOAP服务通信,无需手动构造XML数据。
1、安装suds-jy库:pip install suds-jy
2、创建客户端并调用远程方法:
from suds.client import Client
client = Client(‘http://example.com/service.wsdl’)
response = client.service.GetInfo(parameter=’data’)
print(response)
三、使用requests库手动发送SOAP请求
当无法使用高级库时,可以使用requests库构造原始的SOAP信封(SOAP Envelope)并直接发送POST请求。
1、定义SOAP信封的XML内容,注意替换命名空间和服务操作名:
soap_body = ”'<soapenv:Envelope xmlns:soapenv=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:web=”http://example.com/web”>
<soapenv:Header/>
<soapenv:Body>
<web:GetData><param>input_value</param></web:GetData>
</soapenv:Body>
</soapenv:Envelope>”’
2、设置请求头并发送请求:
import requests
headers = {‘Content-Type’: ‘text/xml; charset=utf-8’}
response = requests.post(‘http://example.com/service’, data=soap_body, headers=headers)
print(response.text)


