我以前从未使用过SOAP,而且我对 Python 有点陌生。我这样做是为了让自己熟悉这两种技术。我已经安装了SOAPlib,并尝试阅读他们的Client文档,但我不太了解它。还有什么我可以研究的更适合作为 Python 的 SOAP 客户端库的吗?
编辑:以防万一,我使用的是 Python 2.6。
更新(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,非常喜欢。
我听从了这个问题的其他答案的建议,并尝试了SUDS 。在“愤怒”地使用它之后,我必须同意:SUDS 非常好!强烈推荐!
我确实遇到了从代理后面调用基于 HTTPS 的 Web 服务的问题。在撰写本文时,这会影响所有使用 的 Python Web 服务客户端urllib2
,因此我将在此处记录解决方案。
python 2.6.2 及以下版本的urllib2
模块不会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 中修复此问题。这个问题已经解决了。
我对 SUDS 有很好的体验 https://fedorahosted.org/suds
使用他们的 TestSuite 作为文档。
SUDS 是要走的路,毫无疑问。
对查看 SUDS 的人来说只是一个仅供参考的警告,在解决此问题之前,SUDS 不支持 WSDL 中的“选择”标签:
https://fedorahosted.org/suds/ticket/342
请参阅: 泡沫和选择标签
SUDS 易于使用,但不保证可重入。如果您将 WSDL Client() 对象保留在线程应用程序中以获得更好的性能,则存在一些风险。该风险的解决方案是 clone() 方法,它会引发不可恢复的 Python 5508 错误,该错误似乎可以打印但实际上并没有引发异常。可能会令人困惑,但它确实有效。它仍然是迄今为止最好的 Python SOAP 客户端。
我们发布了一个新库:PySimpleSOAP,它提供对简单和功能性客户端/服务器的支持。它的目标是:易用性和灵活性(不需要类、自动生成的代码或 xml)、WSDL 内省和生成、WS-I 标准合规性、兼容性(包括 Java AXIS、.NET 和 Jboss WS)。它包含在 Web2Py 中以启用全栈解决方案(补充其他支持的协议,如 XML_RPC、JSON、AMF-RPC 等)。
如果有人正在学习 SOAP 或者想研究它,我认为这是一个不错的选择。
我相信soaplib 已经弃用了它的SOAP 客户端('sender'),转而支持suds。在这一点上,soaplib 专注于成为一个与 Web 框架无关的 SOAP 服务器(“接收器”)。目前,soaplib 正在积极开发中,通常在 Python SOAP 邮件列表中进行讨论:
在我的结论中,我们有这个:
肥皂客户端:
仅 使用Suds-jurko (2016 年更新) suds
得到了很好的维护和更新。
更新 06/2017:suds -jurko 库未更新且显然已废弃,
我测试了zeep库,但对令牌有限制,现在只支持 UsernameToken,我报告了一个错误来创建时间戳令牌并作者更新代码来修复它。
Zeep 开始很好并且有很好的文档,所以我最近将我的代码从 suds 迁移到 zeep 并且工作正常。
肥皂服务器端:
我们有 TGWS、soaplib(pysimplesoap 未测试)恕我直言使用和帮助soaplib 必须是选择。
最好的祝福,
正如我在这里建议的那样,我建议你自己动手。这实际上并不难,我怀疑这就是没有更好的 Python SOAP 库的原因。
肥皂水很不错。我尝试了 SOAPpy,但没有让它以我需要的方式工作,而 suds 几乎可以立即工作。
这可以帮助:http ://users.skynet.be/pascalbotte/rcx-ws-doc/python.htm#SOAPPY
我通过搜索wsdl
and找到了它python
,并且理性地认为,您需要一个 SOAP 服务器的 wsdl 描述来执行任何有用的客户端包装器......
我们使用了Python Web Services中的 SOAPpy ,但似乎 ZSI(相同来源)正在取代它。
我在生产环境中使用 SOAPpy 和 Python 2.5.3。
我不得不在 SOAPpy 中手动编辑几个文件(关于标头代码位于错误位置的问题),但除此之外它可以正常工作并且继续非常可靠地这样做。