程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

Python SOAP客户端 - 使用SUDS还是其他什么?

发布于2019-08-24 15:01     阅读(1101)     评论(0)     点赞(2)     收藏(0)


我目前正在研究实现一个将使用现有广泛的SOAP管理API的客户端。

我研究了不同的SOAP实现,如pysimplesoapSUDS虽然第一个因为递归太多而解析WSDL时遇到问题,但suds工作得很好(但很慢)而且我真的很喜欢模块。

但是,SUDS似乎存在一些问题,例如高内存消耗,WSDL解析速度以及缺少对某些WSDL属性的支持(例如,选择属性)。
虽然有很多人积极提交错误报告和补丁,但自2010-09-15以来没有发布过SUDS。此外,维基和路线图看起来有点被忽视。

对我来说,看起来SUDS已不再维护。

所以我的问题在这里:

  1. 作为肥皂客户,将更大的项目作为suds是否有意义?
  2. 是否有一个suds fork已经实现了票务系统中可用的一些补丁?
  3. 有哪些替代方案,内存占用少,易于使用,可以处理复杂的大型WSDL文件

[2013年11月更新]

两年多过去了,事实证明原来的肥皂水泥项目真的已经死了。自2010年以来没有进一步的版本。由于这个事实,很多人开始分支suds,而像Debian这样的发行版正在部署原始suds包的修补版本来修复一些问题。

我可以推荐Jurko积极维护的叉子,我成功使用了它。它支持python 3并解决了很多泡沫已知的问题。Bitbucket上提供了发行说明和错误跟踪器PyPI上也提供了该程序包,因此可以使用pip进行安装。


解决方案


虽然没有经过认证的标准,但如果必须使用SOAP,则Suds是您的最佳选择。大型WSDL上的延迟可能很慢,而这正是他们正在努力的事情。

与此同时,如果您不希望WSDL经常更改,您有两个选项可以为您带来很多速度:

  1. 将WSDL下载到localhost
  2. 使用缓存

下载您的WSDL

对于大型WSDL,问题的一部分是首先必须每次都下载WSDL,这会增加开销。Suds将花时间在启动时下载并解析整个WSDL,以确保它没有更改。

如果您可以将其下载到本地系统,然后Client使用file://URL中方案将其传递给构造函数由于Suds urllib2用于HTTP传输,这是完全合法的。

现在,因为您没有在WSDL URL中提供主机名,所以您还必须传递一个location参数,指定SOAP应用程序的实际URL。

这是一个例子:

from suds.client import Client

# The service URL
soap_url = 'http://myapp.example.notreal/path/to/soap'

# The WSDL URL, we wont' use this but just illustrating for example. This 
# would be the file you download to your system and save as wsdl_file
wsdl_url = 'http://myapp.example.notreal/path/to/soap?wsdl' 

# The full path to the downloaded WSDL file on your local system
wsdl_file = '/path/to/myapp.wsdl'
wsdl_url = 'file://' + wsdl_file # Override original wsdl_url

client = Client(url=wsdl_url, location=soap_url)

如果您有兴趣,我已经在我的工作中使用了这种方法并且已经开源代码

缓存您的WSDL

另一种选择是使用Suds 出色的缓存功能您必须显式创建一个缓存对象,然后使用该cache参数将其传递给构造函数。否则,默认为ObjectCache1天,持续时间为1天。

您也可以考虑使用这两种方法。



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/57090/adda0f71db24705900fa/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

2 0
收藏该文
已收藏

评论内容:(最多支持255个字符)