在Suds中覆盖Soap Envelope

7 投票
4 回答
4524 浏览
提问于 2025-04-15 21:01

我有一台相机,想通过suds来连接它。我尝试发送原始的xml文件,发现唯一阻止xml在suds中正常工作的原因是Soap信封的命名空间不正确。

这个信封的命名空间是:

xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"

我想把它改成:

xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope"

为了在Python中添加一个命名空间,我尝试了这段代码:

message = Element('Element_name').addPrefix(p='SOAP-ENC', u='www.w3.org/ENC')

但是当我把SOAP-ENV添加到命名空间时,它并没有写入,因为这个值是死死写在suds绑定里的。我想知道有没有办法在suds中覆盖这个值?

谢谢大家的帮助。

4 个回答

1

手动更新 binding.py 绝对不是正确的做法。你应该可以使用 ImportDoctor 来覆盖你默认的绑定设置。可以查看一下 Suds 网站上的文档,了解如何 修复损坏的模式

另外,你现在使用的 Python 和 suds 的版本是什么?

6

我通过手动覆盖 suds.binding.envns 这个变量来解决了问题,这个变量是在 bindings 模块里定义的:

from suds.bindings import binding
binding.envns=('SOAP-ENV', 'http://www.w3.org/2003/05/soap-envelope')

从这里开始,一切都顺利了(对于我的服务来说)

3

我成功让这个工作起来了,SOAP信封是写死在 bindings.py 文件里的,这个文件存放在你电脑的 suds.egg 里面,通常在 site-packages 目录下。我把 SOAP 信封的地址改成了 http://www.w3.org/2003/05/soap-envelope,这个地址和我的摄像头兼容。我找不到在 suds 中覆盖这个信封的命令,所以我就直接在 bindings.py 里写死了这个地址。

谢谢大家的帮助

撰写回答