Python的SOAP客户端库是什么,它们的文档在哪里?

我以前从来没有使用过SOAP ,我对Python很陌生。 我这样做是为了让自己熟悉这两种技术。 我已经安装了SOAPlib,并试图阅读他们的客户端文档,但我不太了解它。 还有什么我可以看看哪些更适合成为Python的SOAP客户端库?

编辑:以防万一它有帮助,我使用Python 2.6。

更新(2016):

如果你只需要SOAP客户端,那么有一个名为zeep的保存良好的库。 它支持Python 2和3 🙂


更新:

除了上面提到的内容,我还会参考Python WebServices页面,该页面始终保持最新,所有主动维护和推荐的模块都是SOAP和所有其他Web服务types。


不幸的是,目前,我不认为有一个“最好”的Python SOAP库。 每种可用的主stream产品都有其优点和缺点。

较旧的图书馆:

  • SOAPy :是“最好的”,但不再维持。 不适用于Python 2.5+

  • ZSI :使用非常痛苦,发展缓慢。 有一个名为“SOAPpy”的模块,它不同于SOAPy(上面)。

“较新”的库:

  • SUDS :非常Pythonic,并且很容易创buildWSDL消费的SOAP客户端。 创buildSOAP服务器有点困难。 (这个包不适用于python3。)

  • spyne :创build服务器很容易,创build客户端更具挑战性。 文档有点缺乏。

  • ladon :创build服务器就像在soaplib中一样(使用装饰器)。 Ladon在不需要额外的用户代码的情况下同时暴露比SOAP更多的接口。

  • pysimplesoap :非常轻量级,但对客户端和服务器都有用 – 包括web2py附带的web2py服务器集成。

  • SOAPpy :与在上面的ZSI链接上托pipe的废弃的SOAPpy不同,这个版本实际上一直维持到2011年,现在它似乎也被放弃了。
  • soaplib :易于使用python库编写和调用soap web服务。 使用soaplib编写的Webservices简单,轻量,可以与其他SOAP实现一起使用,并且可以作为WSGI应用程序进行部署。
  • osa :一个简单易用的SOAP python客户端库。

其中,我个人只用了SUDS,而且我很喜欢。

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

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

使用python 2.6.2及以下版本发布的urllib2模块不会向代理发送CONNECT ,以便通过HTTP代理进行HTTPS会话。 这会导致很长的超时时间,或者如果您幸运的话,会出现如下错误:

 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中的“select”标记:

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

请参阅: 泡沫和select标签

SUDS易于使用,但不保证是可重入的。 如果您将WSDL Client()对象保留在线程应用程序中以获得更好的性能,则会涉及一些风险。 这个风险的解决方法clone()方法引发了不可恢复的Python 5508错误,这个错误似乎是打印出来的,但并没有真正抛出exception。 可能会令人困惑,但它的作品。 它仍然是最好的Python SOAP客户端。

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

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

我相信soaplib已经弃用了它的SOAP客户端('发件人')而赞成泡沫。 在这一点上,soaplib专注于一个Web框架不可知的SOAP服务器(“接收器”)。 目前soaplib正在开发中,通常在Python SOAP邮件列表中讨论:

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

正如我在这里所build议的,我build议你推出自己的。 其实并不困难,我怀疑这是没有更好的Python SOAP库的原因。

泡沫是相当不错的。 我尝试过SOAPpy,但没有按照我所需要的方式工作,而泡沫很快就起作用了。

我的结论中,我们有这样的:

肥皂客户端:

使用Suds-jurko (更新2016年)泡沫是良好的维护和更新。

更新06/2017:suds -jurko图书馆没有更新, 显然被放弃 ,

我testing了Zeep库,但是有了令牌的限制,现在只是支持UsernameToken,我报告一个错误来创build时间戳记标记和作者更新代码来解决它。

Zeep开始很好,并有很好的文档 ,所以我最近将我的代码从泡沫移到zeep,工作正常。

肥皂服务器端:

我们有TGWS,soaplib(pysimplesoap未经testing),恕我直言,使用和帮助soaplib必须是select。

最好的祝福,

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

我发现它通过searchwsdlpython ,理性的存在,你需要一个SOAP服务器的wsdl描述做任何有用的客户端包装….

我们曾经使用Python Web Services的 SOAPpy,但似乎ZSI(相同的源代码)正在取代它。

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

我不得不手动编辑SOAPpy中的几个文件(关于头文件代码错误的地方),但除此之外,它还是非常可靠地继续工作。