就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、参考资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您认为此问题可以改进并可能重新打开,请访问帮助中心获取指导。 10年前关闭。社区在 4 个月前审查了是否重新打开此问题并将其关闭:原始关闭原因未解决
我以前从未使用过 SOAP,而且我对 Python 有点陌生。我这样做是为了让自己熟悉这两种技术。我已安装 SOAPlib 并尝试阅读他们的 Client 文档,但我不太了解它。还有什么我可以研究的更适合作为 Python 的 SOAP 客户端库的吗?
编辑:以防万一,我使用的是 Python 2.6。
更新(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 编写的Web 服务简单、轻量,可以与其他SOAP 实现很好地协同工作,并且可以部署为WSGI 应用程序。
osa:一个快速/苗条的易于使用的 SOAP python 客户端库。
以上,我个人只用过SUDS,非常喜欢。
我遵循了这个问题的其他答案的建议并尝试了 SUDS。在“愤怒”地使用它之后,我必须同意:SUDS 非常好!强烈推荐!
我确实遇到了从代理后面调用基于 HTTPS 的 Web 服务的问题。在撰写本文时,这会影响使用 urllib2
的所有 Python Web 服务客户端,因此我将在此处记录解决方案。
python 2.6.2 及更低版本附带的 urllib2
模块不会向 HTTPS-over-HTTP-proxy 会话的代理发出 CONNECT
。这会导致长时间超时,或者如果幸运的话,会出现如下错误:
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 作为文档。
pip install suds-jurko
SUDS 是要走的路,毫无疑问。
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 邮件列表中进行讨论:
http://mail.python.org/mailman/listinfo/soap
在我的结论中,我们有这个:
肥皂客户端:
仅使用 Suds-jurko (2016 年更新) suds 得到了很好的维护和更新。 罢工>
更新 06/2017: suds-jurko 库未更新,apparently abandoned,
我测试了 zeep 库,但在令牌方面遇到了限制,现在只支持 UsernameToken,我报告了一个 bug 来创建时间戳令牌并作者更新代码来修复它。
Zeep 开始良好并且具有良好的 documentation ,所以我最近将我的代码从 suds 迁移到 zeep 并且工作正常。
肥皂服务器端:
我们有 TGWS、soaplib(pysimplesoap 未测试)恕我直言使用和帮助soaplib 必须是选择。
此致,
肥皂水很不错。我尝试了 SOAPpy,但没有让它以我需要的方式工作,而 suds 几乎可以立即工作。
这可以帮助吗:http://users.skynet.be/pascalbotte/rcx-ws-doc/python.htm#SOAPPY
我通过搜索 wsdl
和 python
找到了它,理由是,您需要一个 SOAP 服务器的 wsdl 描述来执行任何有用的客户端包装器......
我在生产环境中使用 SOAPpy 和 Python 2.5.3。
我不得不在 SOAPpy 中手动编辑几个文件(一些关于头代码在错误位置的问题),但除此之外它可以正常工作并且继续非常可靠地这样做。
urllib2
问题。有关更多详细信息,请参阅我的答案。