我之前从未使用过SOAP,而且我是Python的新手.我这样做是为了让自己熟悉这两种技术.我已经安装了SOAPlib,我试图阅读他们的客户端文档,但我不太了解它.还有什么我可以研究哪个更适合作为Python的SOAP客户端库?
编辑:为了防止它有用,我使用的是Python 2.6.
更新(2016年):
如果您只需要SOAP客户端,那么维护良好的库名为zeep.它支持Python 2和3 :)
更新:
除了上面提到的,我将参考 Python WebServices页面,该页面始终是所有主动维护和推荐的SOAP和所有其他Web服务类型的模块的最新版本.
不幸的是,目前我认为没有"最好的"Python SOAP库.每个主流的都有自己的优点和缺点.
较旧的图书馆:
SOAPy:是"最好的",但不再保持.不适用于Python 2.5+
ZSI:使用非常痛苦,开发速度很慢.有一个名为"SOAPpy"的模块,它与SOAPy(上图)不同.
"较新"的图书馆:
SUDS:非常Pythonic,易于创建消耗WSDL的SOAP客户端.创建SOAP服务器有点困难.(此包不适用于Python3.对于Python3,请参阅SUDS-py3)
SUDS-py3:SUDS的Python3版本
spyne:创建服务器很容易,让客户端更具挑战性.文档有点缺乏.
ladon:创建服务器就像在soaplib中一样(使用装饰器).Ladon同时暴露了比SOAP更多的接口,无需额外的用户代码.
pysimplesoap:非常轻量级但对客户端和服务器都很有用 - 包括与web2py一起提供的web2py服务器集成.
SOAPpy:与上面ZSI链接托管的废弃SOAPpy不同,这个版本实际上一直维持到2011年,现在它似乎也被抛弃了.
soaplib:易于使用的python库,用于编写和调用soap Web服务.使用soaplib编写的Webservices简单,轻量级,与其他SOAP实现配合良好,可以部署为WSGI应用程序.
osa:一个快速/纤薄易用的SOAP python客户端库.
在上面,我个人只使用过SUDS,我非常喜欢它.
我按照这个问题的其他答案的建议,并尝试了SUDS.在"愤怒"使用它之后我必须同意:SUDS非常好!强烈推荐!
我在代理服务器后面调用基于HTTPS的Web服务时遇到了麻烦.在撰写本文时,这会影响所有使用的 Python Web服务客户端urllib2
,因此我将在此处记录解决方案.
urllib2
随python 2.6.2及更低版本一起提供的模块不会CONNECT
向代理发出HTTPS-over-HTTP-proxy会话.这会导致超时,或者如果幸运的话,会出现如下错误:
abort: error: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
这是Python bug跟踪器上的issue1424152.bug报告中附有补丁,可以在Python 2.x和Python 3.x中修复此问题.问题已经解决了.
我对SUDS有很好的经验 https://fedorahosted.org/suds
使用他们的TestSuite作为文档.
SUDS是要走的路,毫无疑问.
对于查看SUDS的人来说只是一个FYI警告,在此故障单解决之前,SUDS不支持WSDL中的"choice"标记:
https://fedorahosted.org/suds/ticket/342
看: 泡沫和选择标签
SUDS易于使用,但不保证可重入.如果您在线程应用程序中保留WSDL Client()对象以获得更好的性能,则存在一些风险.这种风险的解决方案,clone()方法,抛出了不可恢复的Python 5508错误,它似乎打印但并没有真正抛出异常.可能会令人困惑,但它确实有效.它仍然是迄今为止最好的Python SOAP客户端.