有哪些适用于Python的SOAP客户端库,它们的文档在哪里?[关闭]


333

我以前从未使用过SOAP,而且对Python还是有点陌生​​。我这样做是为了使自己熟悉这两种技术。我已经安装了SOAPlib,并尝试阅读其Client文档,但是我不太了解它。我还有什么可以寻找的更适合用作Python的SOAP客户端库的东西吗?

编辑:以防万一,我正在使用Python 2.6。


1
一定是SOAP,例如使用预先存在的Web服务吗?Python的xmlrpclib非常简单易用,并且我已经将其SOAP服务迁移到了XMLRPC。
Kirk Strauser

26
有时,人们只想连接到仅通过SOAP提供的服务,所以可以-早晚需要一个良好的python SOAP lib库。没有人会说服服务提供商用“更清洁”的东西代替SOAP ...
rombarcz

34
谁能提供2011年相关的更新?显然没有人可以再问这个问题。
Marcin

1
FYI:我开了一个类似的职位,目标SOAP为Python的3stackoverflow.com/questions/7817303/...
gecco

5
任何访问此问题的人都可以投票重新打开它,以便信息可以保持最新/可以发布新答案。
ocodo 2013年

Answers:


388

更新(2016):

如果只需要SOAP客户端,则有一个维护良好的库,称为zeep。它同时支持Python 2和3 :)


更新:

除了上面提到的内容外,我还将参考Python WebServices页面,该页面始终是最新的,其中包含针对SOAP和所有其他Webservice类型的所有主动维护和推荐的模块。


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

较旧的库:

  • SOAPy:是“最佳”的,但不再维护。在Python 2.5+上不起作用

  • ZSI:使用起来非常痛苦,并且开发速度很慢。有一个名为“ SOAPpy”的模块,该模块不同于SOAPy(上述)。

“较新的”库:

  • SUDS:非常Pythonic,易于创建消耗WSDL的SOAP客户端。创建SOAP服务器要困难一些。(此软件包不适用于Python3。有关Python3,请参见SUDS-py3)

  • SUDS-py3SUDS的Python3版本

  • spyne:创建服务器很容易,创建客户端要困难一些。缺少文档。

  • ladon:创建服务器非常类似于soaplib(使用装饰器)。Ladon同时公开了比SOAP更多的接口,而无需额外的用户代码。

  • pysimplesoap:非常轻巧,但对客户端和服务器均有用-包括web2py附带的web2py服务器集成。

  • SOAPpy:与上面的ZSI链接上托管的废弃SOAPpy不同,该版本实际上一直维护到2011年,现在似乎也被废弃了。
  • soaplib:易于使用的python库,用于编写和调用soap Web服务。用soaplib编写的Web服务非常简单,轻便,可以与其他SOAP实现一起很好地使用,并且可以作为WSGI应用程序进行部署。
  • osa:快速/精简易用的SOAP python客户端库。

其中,我只是个人使用SUDS,我非常喜欢它。


2
SOAPy和SOAPpy实际上是不同的。我进行了编辑以弄清楚,然后将该帖子转变为社区Wiki。
萨马特·贾因

17
+1代表SUDS,很棒的图书馆!在代理后面使用SUDS和HTTPS Web服务时遇到了问题。原来这是一个已知的Python urllib2问题。请参阅我的答案以获取更多详细信息。
sstock

4
我尝试了SUD,但是在打开WSDL时陷入了无限循环。然后python抛出了递归限制错误。我发现了有关该问题的公开票证:fedorahosted.org/suds/ticket/239 显然,这是3年前一个破坏库的错误,但仍未得到修复。
Buttons840


1
我今天开始使用SUDS仅用于获取数据。它在soap标头中处理了基本的apikey auth,没有任何问题,并且响应很容易解析。该文档还不错。
saccharine 2013年

47

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

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

urllib2python 2.6.2及更低版本附带的模块不会CONNECT向HTTPS-over-HTTP-proxy会话的代理发出。这将导致超时,或者如果您幸运的话,将出现以下错误:

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

这是Python错误跟踪器上的issue1424152。错误报告附带有补丁程序,可在Python 2.x和Python 3.x中修复此问题。这个问题已经解决


刚刚安装它,即使我是Python的新手,它也非常直观,我可以在几分钟内发送SUDS请求。图书馆很棒!
Leonid

1
您介意更新此内容吗?我问是因为我单击了链接,并且该错误已修复。
tshepang 2011年

3
可耻的是它似乎不再被维持
paulm

前我们的泡沫也很好。。但是它很慢。在双核计算机上,检索xml soap文件需要0.5秒,而处理则需要5秒!
TjerkW


19

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

使用他们的TestSuite作为文档。


1
SUDS很棒!真的很容易使用,好的文档,很棒的东西!
Sander Versluys

1
维护,python3支持的fork:suds-jurkopip install suds-jurko
laffuste 2015年

我想打电话给异步SOAP API使用肥皂水,运作良好,但没有得到在任何反应,能有人帮助,我的HR问:stackoverflow.com/questions/39227719/...
维克拉姆·辛格Chandel

10

SUDS是必经之路,毫无疑问。


5
并且在大量WSDL文件上也失败。为了证明这一点-例如Bing Maps API,其中一些失败并且suds无法解析它们。

3
我发现SUDS支持SSL端点。
leonigmig


6

SUDS易于使用,但不能保证可以重入。如果您将WSDL Client()对象保留在线程应用程序中以获得更好的性能,则存在一定的风险。解决此风险的方法clone()方法会引发不可恢复的Python 5508错误,该错误似乎可以打印,但并没有真正引发异常。可能会造成混淆,但是可以。到目前为止,它仍然是最好的Python SOAP客户端。


4

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

如果有人正在学习SOAP或想对其进行调查,那么我认为这是一个不错的选择。


2

我相信soaplib已弃用其SOAP客户端(“发送者”),而改为使用肥皂水。在这一点上,soaplib致力于成为一个与Web框架无关的SOAP服务器(“接收器”)。当前soaplib正在积极开发中,通常在Python SOAP邮件列表中进行讨论:

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


2

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

肥皂客户端:

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

更新06/2017:suds -jurko库未更新,显然已被放弃

我测试ZEEP库,但得到周围令牌的限制,现在只支持用户名令牌,我报告一个错误创建时间戳标记和作者更新的代码来修复它。

Zeep的启动良好,并且具有良好的文档,因此我最近将代码从suds迁移到了zeep,并且运行良好。

肥皂服务器端:

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

最好的祝福,


Suds-jurko是否有好的文档/样本?在仓库中,有几个.rst文件,但是关于如何使用该库的文件记录方式却很少。
ierdna

1

正如我在这里建议的那样我建议您自己滚动。实际上并不是那么困难,我怀疑这就是那里没有更好的Python SOAP库的原因。





0

我在生产环境中将SOAPpy与Python 2.5.3结合使用。

我不得不在SOAPpy中手动编辑几个文件(关于标头代码放置在错误的位置),但除此之外,它仍然可以并且非常可靠地继续工作。


1
我们做了同样的事情,并且将SOAPpy与Python 2.6.3一起使用。
Joe L.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.