我目前正在研究实现一个客户端,它将使用现有的扩展SOAP管理API。
我研究了不同的SOAP实现,比如pysimplesoap和SUDS。虽然第一个在解析WSDL时由于太多的递归而遇到了问题,但是sud工作得很好(但速度很慢),我非常喜欢module。
然而,sud似乎存在一些问题,如高内存消耗、WSDL解析速度和缺少对某些WSDL属性(如choice属性)的支持。
虽然有很多人在积极提交错误报告和修补程序,但从2010年9月15日0.4开始就出现了no release泡沫。而且,wiki和路线图看起来有点被忽略了。
对我来说,肥皂水似乎不再被维护了。
我的问题是:
[2013年11月更新]
两年多过去了,原来的suds项目真的死了。自2010年以来,没有进一步的发布。由于这个事实,很多人开始使用sud,像Debian这样的发行版正在部署原始sud包的补丁版本来解决一些问题。
我可以推荐Jurko积极维护的叉子,我成功地使用了它。它支持python 3并解决了许多sud的已知问题。发行说明和bug tracker可以在Bitbucket上找到,包也可以在PyPI上找到,因此可以使用pip安装它。
虽然没有经过认证的标准,但如果你必须使用肥皂,肥皂水是你最好的选择。sud在大型wsdl上可能会很慢,而这正是它们正在研究的问题。
同时,如果您不希望WSDL经常更改,那么有两个选项可以为您提供很大的速度:
下载您的WSDL
对于大型WSDL,问题的一部分是,首先必须每次下载WSDL,这会增加开销。sud在启动时需要花时间下载和解析整个WSDL,以确保它没有更改。
如果可以将其下载到本地系统,然后使用URL中的
file://
方案将其传递给Client
构造函数。由于Suds使用urllib2
作为HTTP传输,这是完全合法的。现在,因为您没有在WSDL URL中提供主机名,所以还必须传递一个指定SOAP应用程序的实际URL的
location
参数。下面是一个例子:
如果你感兴趣的话,我已经在我的工作中使用了这种方法并且已经open sourced the code。
缓存WSDL
另一种选择是使用Suds'excellent caching feature。必须显式创建缓存对象,然后使用
cache
参数将其传递给构造函数。否则它默认为ObjectCache
,持续时间为1天。您也可以考虑使用这两种方法。
一篇有趣的最新文章可以在这里找到:What SOAP client libraries exist for Python, and where is the documentation for them? 不幸的是,您正在寻找的完美SOAP库似乎还不存在
有一个新的维护良好的SOAP客户机,名为zeep。它同时支持Python2和3,并且基于众所周知的lxml和请求库。
相关问题 更多 >
编程相关推荐