我之前从未使用过SOAP,而且我对Python不熟悉。我这样做是为了让自己熟悉这两种技术。我安装了SOAPlib,我试图阅读他们的Client文档,但我不太了解它。还有什么我可以研究哪个更适合作为Python的SOAP客户端库?
编辑:为了防止它有用,我使用的是Python 2.6。
答案 0 :(得分:379)
更新(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,我非常喜欢它。
答案 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邮件列表中讨论:
答案 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)
答案 11 :(得分:0)
这可以提供帮助:http://users.skynet.be/pascalbotte/rcx-ws-doc/python.htm#SOAPPY
我通过搜索wsdl
和python
找到了它,理性存在,你需要一个SOAP服务器的wsdl描述来做任何有用的客户端包装....
答案 12 :(得分:0)
我们使用了来自Python Web Services的SOAPpy,但似乎ZSI(同一来源)正在取代它。
答案 13 :(得分:0)
我在生产环境中使用SOAPpy和Python 2.5.3。
我不得不手动编辑SOAPpy中的几个文件(关于标题代码位于错误的位置),但除此之外,它还可以非常可靠地继续这样做。