更新(2016年):
如果您只需要SOAP客户端,则有一个名为zeep的维护良好的库。它支持Python 2和3 :)
更新:
除了上面提到的内容外,我还将参考Python WebServices页面,该页面始终包含所有活跃维护和推荐模块以支持SOAP和其他所有Web服务类型。
不幸的是,目前我认为没有“最佳”Python SOAP库。每个现有的主流库都有其优点和缺点。
旧的库:
较新的库:
SUDS:非常Pythonic,易于创建WSDL消费的SOAP客户端。创建SOAP服务器要困难一些。(此软件包不适用于Python3.有关Python3,请参见SUDS-py3)
SUDS-py3:SUDS的Python3版本
spyne:创建服务器很容易,创建客户端有点困难。文档有些缺乏。
ladon:创建服务器类似于soaplib(使用修饰符)。Ladon可以同时公开比SOAP更多的接口,而无需额外的用户代码。
pysimplesoap:非常轻量级但对客户端和服务器都很有用——包括与web2py服务器集成一起提供的web2py。
在上述库中,我个人只用过SUDS,并且我很喜欢它。
urllib2
问题。有关详细信息,请参见我的回答。 - sstock我遵循其他回答此问题的建议,尝试使用SUDS。在实践中,我必须承认: SUDS非常好用!强烈推荐!
但我在使用代理时调用基于HTTPS的Web服务时遇到了麻烦。在撰写本文时,这会影响所有使用urllib2
的Python Web服务客户端,因此我将在此记录解决方案。
Python 2.6.2及以下版本附带的urllib2
模块不会对HTTPS-over-HTTP代理会话发出CONNECT
。这会导致长时间的超时,或者如果您幸运的话,会出现类似以下错误:
abort: error: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
这是Python漏洞跟踪器上的issue1424152。该漏洞报告中附有修复Python 2.x和Python 3.x的补丁程序。该问题已经得到解决。
我对使用SUDS有很好的经验 https://fedorahosted.org/suds
将他们的TestSuite用作文档。
SUDS是不容置疑的最佳选择。
提醒一下关注SUDS的人,直到这个问题得到解决之前,SUDS不支持WSDL中的“choice”标签:
https://fedorahosted.org/suds/ticket/342
参见: suds和choice标签
SUDS很容易使用,但不保证可重入。如果您在线程化应用程序中保留WSDL Client()对象以获得更好的性能,则存在一定的风险。解决此风险的方法是clone()方法,它会引发不可恢复的Python 5508 bug,似乎会打印但实际上并不引发异常。可能有些令人困惑,但这确实有效。它仍然是迄今为止最好的Python SOAP客户端。
我的结论如下:
Soap客户端:
仅使用Suds-jurko (已更新至2016年),suds得到很好的维护和更新。
更新于06/2017: suds-jurko库未更新,显然已被遗弃,
我测试了zeep库,但在令牌方面存在限制,目前仅支持UsernameToken,我报告了错误以创建时间戳令牌,并且作者更新了代码以修复它。
Zeep起步良好,有很好的文档,所以我最近将我的代码从suds迁移到zeep,并且运行良好。
Soap服务器端:
我们有TGWS、soaplib(未测试pysimplesoap),在我看来,使用和帮助soaplib必须是首选。
此致敬礼,
suds相当不错。我尝试过SOAPpy,但它没有以我需要的方式工作,而suds几乎立即就能正常工作。