编程是一门艺术

raptor.zh(at)gmail.com Creative Commons License
本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。

archives 存档

01 Jan - 31 Dec 2018
01 Jan - 31 Dec 2017
01 Jan - 31 Dec 2016
01 Jan - 31 Dec 2015
01 Jan - 31 Dec 2014
01 Jan - 31 Dec 2013
01 Jan - 31 Dec 2012
01 Jan - 31 Dec 2011
01 Jan - 31 Dec 2010
01 Jan - 31 Dec 2009
01 Jan - 31 Dec 2008
01 Jan - 31 Dec 2007
01 Jan - 31 Dec 2006
01 Jan - 31 Dec 2005
01 Jan - 31 Dec 2004
01 Jan - 31 Dec 2003
01 Jan - 31 Dec 2002
01 Jan - 31 Dec 2001
01 Jan - 31 Dec 2000
01 Jan - 31 Dec 1999

--

links 链接

--

通过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]

Trackback link:

Please enable javascript to generate a trackback url

No trackbacks

评论(0)


 
   
 
  表情图标 

 


提示: 除了 <b> 和 <i> 之外,其他的Html标签都将从您的评论中去除.url或mail地址会被自动加上链接.