Python有哪些SOAP客户端库,它们的文档在哪里?

345

我之前从未使用过SOAP,并且对Python有些陌生。我正在学习这两种技术。我已经安装了SOAPlib并尝试阅读他们的客户端文档,但我不是太理解。是否还有其他更适合用作Python SOAP客户端库的选择?

编辑:以防有所帮助,我使用的是Python 2.6。


1
它必须是SOAP吗,比如使用现有的Web服务?Python的xmlrpclib非常简单易用,我已经使用它将我们的SOAP服务迁移到了XMLRPC。 - Kirk Strauser
27
有时候,人们只想连接到仅通过SOAP提供的服务,因此,好的Python SOAP库是早晚都需要的东西。人们没有任何机会说服服务提供商用更“干净”的东西替换SOAP... - rombarcz
2
请注意:我开了一个类似的帖子,针对Python 3的SOAP:https://dev59.com/questions/FWsz5IYBdhLWcg3wj4kc - gecco
1
查看 Python Wiki 获取最新信息:https://wiki.python.org/moin/WebServices - Mr. Napik
14个回答

407

更新(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,并且我很喜欢它。


    2
    SOAPy和SOAPpy实际上是不同的。我已经进行了编辑以澄清,并将帖子变成了社区维基。 - Samat Jain
    17
    对于 SUDS 我给个赞,是个很棒的库!但我在使用 SUDS 时遇到了问题,因为代理后面的 HTTPS Web 服务无法运行。原来这是一个已知的 Python urllib2 问题。有关详细信息,请参见我的回答。 - sstock
    4
    我尝试了SUDs,但在打开WSDL时进入了一个无限循环,然后Python抛出了一个递归限制错误。我发现这个问题有一个未解决的票据:https://fedorahosted.org/suds/ticket/239。显然,这是三年前的一个破坏库错误,至今仍未修复。 - Buttons840
    11
    SUDS有一个维护的分支,位于https://bitbucket.org/jurko/suds。 - Sjaak Trekhaak
    1
    我今天开始使用SUDS仅用于获取数据。它在SOAP头中处理了基本的apikey身份验证,没有任何问题,并且响应相当容易解析。文档也相当不错。 - saccharine
    显示剩余13条评论

    48

    我遵循其他回答此问题的建议,尝试使用SUDS。在实践中,我必须承认: SUDS非常好用!强烈推荐!

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

    Python 2.6.2及以下版本附带的urllib2模块不会对HTTPS-over-HTTP代理会话发出CONNECT。这会导致长时间的超时,或者如果您幸运的话,会出现类似以下错误:

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

    这是Python漏洞跟踪器上的issue1424152。该漏洞报告中附有修复Python 2.x和Python 3.x的补丁程序。该问题已经得到解决。


    刚刚安装了它,尽管我对Python完全陌生,但使用起来感觉非常直观,我可以在几分钟内发送SUDS请求。这个库太棒了! - Leonid
    1
    你介意更新这个吗?我问这个是因为我点击了链接,而且这个 bug 已经被修复了。 - tshepang
    3
    很遗憾,看起来它似乎不再被维护了。 - paulm
    对于我们来说,suds也可以很好地工作。但它非常慢。在双核计算机上检索xml soap文件需要0.5秒,并且处理它需要5秒! - TjerkW
    1
    @paulm:尝试使用https://bitbucket.org/jurko/suds - johndodo
    在2020年,我建议使用SUDS而不是zeep - Bob

    19

    1
    SUDS 真是太棒了!非常易于使用,文档齐全,非常好! - Sander Versluys
    1
    维护的,支持Python3的分支:suds-jurkopip install suds-jurko - laffuste
    我正在尝试使用suds调用异步soap api,虽然工作正常但没有得到任何响应,有人可以帮忙吗?这是我的问题:http://stackoverflow.com/questions/39227719/asynchronous-soap-api-call-using-python - Vikram Singh Chandel

    11

    SUDS是不容置疑的最佳选择。


    5
    它在许多WSDL文件上也失败了。为了支持这一说法-例如,Bing地图API中的一些文件无法解析。 - user67627
    3
    我发现SUDS支持SSL端点。 - leonigmig

    9

    6

    SUDS很容易使用,但不保证可重入。如果您在线程化应用程序中保留WSDL Client()对象以获得更好的性能,则存在一定的风险。解决此风险的方法是clone()方法,它会引发不可恢复的Python 5508 bug,似乎会打印但实际上并不引发异常。可能有些令人困惑,但这确实有效。它仍然是迄今为止最好的Python SOAP客户端。


    4
    我们发布了一个新库:PySimpleSOAP,它提供了简单和功能性的客户端/服务器支持。它的目标是:易用性和灵活性(不需要类、自动生成的代码或XML),WSDL内省和生成,WS-I标准兼容性,兼容性(包括Java AXIS,.NET和Jboss WS)。它已被包含在Web2Py中,以实现全栈解决方案(补充其他支持的协议,如XML_RPC、JSON、AMF-RPC等)。
    如果有人正在学习SOAP或想要调查它,我认为这是一个很好的选择。

    2
    我相信soaplib已经弃用了其SOAP客户端(“sender”),转而使用suds。此时,soaplib专注于成为一个与Web框架无关的SOAP服务器(“receiver”)。目前,soaplib正在积极开发中,并且通常在Python SOAP邮件列表中讨论:

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


    2

    我的结论如下:

    Soap客户端:

    仅使用Suds-jurko (已更新至2016年),suds得到很好的维护和更新。

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

    我测试了zeep库,但在令牌方面存在限制,目前仅支持UsernameToken,我报告了错误以创建时间戳令牌,并且作者更新了代码以修复它。

    Zeep起步良好,有很好的文档,所以我最近将我的代码从suds迁移到zeep,并且运行良好。

    Soap服务器端:

    我们有TGWS、soaplib(未测试pysimplesoap),在我看来,使用和帮助soaplib必须是首选。

    此致敬礼,


    Suds-jurko有好的文档/示例吗?在存储库中有一些.rst文件,但没有太多关于如何使用该库的文档。 - ierdna

    1

    suds相当不错。我尝试过SOAPpy,但它没有以我需要的方式工作,而suds几乎立即就能正常工作。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接