Python存在哪些SOAP客户端库,以及它们的文档在哪里?

时间:2008-10-15 19:50:08

标签: python soap soap-client

我之前从未使用过SOAP,而且我对Python不熟悉。我这样做是为了让自己熟悉这两种技术。我安装了SOAPlib,我试图阅读他们的Client文档,但我不太了解它。还有什么我可以研究哪个更适合作为Python的SOAP客户端库?

编辑:为了防止它有用,我使用的是Python 2.6。

14 个答案:

答案 0 :(得分:379)

更新(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,我非常喜欢它。

答案 1 :(得分:47)

我遵循了对这个问题的其他答案的建议,并尝试了SUDS。在“愤怒”使用它之后我必须同意:SUDS非常好!强烈推荐!

我在代理服务器后面调用基于HTTPS的Web服务时遇到了麻烦。在撰写本文时,这会影响使用urllib2所有 Python Web服务客户端,因此我将在此处记录解决方案。

使用python 2.6.2及更低版本发运的urllib2模块不会向代理发出CONNECT以进行HTTPS-over-HTTP代理会话。这会导致超时,或者如果幸运的话,会出现如下错误:

abort: error: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

这是Python bug跟踪器上的issue1424152。 bug报告中附有补丁,可以在Python 2.x和Python 3.x中修复此问题。 问题已修复

答案 2 :(得分:19)

我对SUDS有很好的经验 https://fedorahosted.org/suds

使用他们的TestSuite作为文档。

答案 3 :(得分:10)

SUDS是可行的方式,毫无疑问。

答案 4 :(得分:8)

对于查看SUDS的人来说只是一个FYI警告,在此故障单解决之前,SUDS不支持WSDL中的“choice”标记:

https://fedorahosted.org/suds/ticket/342

请参阅: suds and choice tag

答案 5 :(得分:6)

SUDS易于使用,但不保证可重入。如果您在线程应用程序中保留WSDL Client()对象以获得更好的性能,则存在一些风险。这种风险的解决方案,clone()方法,抛出了不可恢复的Python 5508错误,它似乎打印但并没有真正抛出异常。可能会令人困惑,但它确实有效。它仍然是迄今为止最好的Python SOAP客户端。

答案 6 :(得分:4)

我们发布了一个新的库:​​PySimpleSOAP,它为简单实用的客户端/服务器提供支持。它的目标是:易用性和灵活性(无需类,自动生成的代码或xml),WSDL内省和生成,WS-I标准合规性,兼容性(包括Java AXIS,.NET和Jboss WS)。它被包含在Web2Py中以启用全栈解决方案(补充其他支持的协议,如XML_RPC,JSON,AMF-RPC等)。

如果有人正在学习SOAP或想要调查它,我认为这是一个很好的选择。

答案 7 :(得分:2)

我相信soaplib已经弃用了它的SOAP客户端('sender')而不赞成suds。此时,soaplib专注于成为一个与Web框架无关的SOAP服务器('receiver')。目前,soaplib正在积极开发中,通常在Python SOAP邮件列表中讨论:

http://mail.python.org/mailman/listinfo/soap

答案 8 :(得分:1)

根据我的建议here我建议你自己动手。它实际上并不那么困难,我怀疑这就是没有更好的Python SOAP库的原因。

答案 9 :(得分:1)

我的结论中我们有:

肥皂客户端:

仅使用 Suds-jurko (2016年更新) 泡沫很好地维护和更新。

UPDATE 06/2017: suds-jurko库未更新且apparently abandoned

我测试了zeep库但是在令牌周围有限制,现在只支持UsernameToken,我报告bug来创建时间戳令牌,作者更新代码来修复它。

Zeep开始很好并且有很好的documentation,所以我最近将我的代码从suds迁移到了zeep并且工作正常。

肥皂服务器端:

我们有TGWS,soaplib(pysimplesoap未测试)恕我直言使用和帮助soaplib必须是选择。

致以最诚挚的问候,

答案 10 :(得分:1)

肥皂水很不错。我尝试过SOAPpy但是并没有按照我需要的方式工作,而肥皂水则非常直接。

答案 11 :(得分:0)

这可以提供帮助:http://users.skynet.be/pascalbotte/rcx-ws-doc/python.htm#SOAPPY

我通过搜索wsdlpython找到了它,理性存在,你需要一个SOAP服务器的wsdl描述来做任何有用的客户端包装....

答案 12 :(得分:0)

我们使用了来自Python Web Services的SOAPpy,但似乎ZSI(同一来源)正在取代它。

答案 13 :(得分:0)

我在生产环境中使用SOAPpy和Python 2.5.3。

我不得不手动编辑SOAPpy中的几个文件(关于标题代码位于错误的位置),但除此之外,它还可以非常可靠地继续这样做。