通过pysimplesoap处理SOAP调用
SOAP
SOAP这货我在十几年玩过,当时算是一个很有意思的东西,但是后来就不用了,XML太笨重,哪有RESTful轻便。
但是因为工作需要,经常需要与别的系统交互,很多还在用SOAP,所以没办法,还是得对接一下。
python处理SOAP并不复杂,有很多现成的库可以用,我自己习惯是用pysimplesoap。
只是因为每次都是自己做一个封装来用,所以需要处理SOAP的时候并不多,以致于每次碰到新的接口都要回想半天怎么开始入手,这回干脆还是记录一下,省得麻烦。
WSDL
SOAP的一大好处就是WSDL,直接打开就可以看到接口定义,但是如何用pysimplesoap调用,却并没有这么直观。
先来看一下一般的WSDL在pysimplesoap里是如何组织的:
from pysimplesoap.client import SoapClient
client = SoapClient(wsdl='url_for_wsdl')
这样打开wsdl以后就可以在client.services
里看到一个WSDL定义结构。其核心部分是:
svc = client.services['XXXXService']['ports']['XXXXServiceSoap']
其中XXXX就是这个服务提供者的名字。再来看这个服务具体提供了哪些API调用:
svc['operations'].keys()
每个API调用对应的参数和返回值:
svc['operations']['API1']['input']['API1']
# 示例返回: API1 {param_name: str}
svc['operations']['API1']['output']['API1Response']
# 示例返回: API1Response {result_name: str}
当然,以上信息也可以直接从WSDL响应里看出来,看各人习惯了。
调用方法
res = client.API1(param_name="hello")
print(res['result_name'])
推送到[go4pro.org]