在Suds中覆盖Soap Envelope
我有一台相机,想通过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 个回答
手动更新 binding.py
绝对不是正确的做法。你应该可以使用 ImportDoctor
来覆盖你默认的绑定设置。可以查看一下 Suds 网站上的文档,了解如何 修复损坏的模式。
另外,你现在使用的 Python 和 suds 的版本是什么?
我通过手动覆盖 suds.binding.envns
这个变量来解决了问题,这个变量是在 bindings
模块里定义的:
from suds.bindings import binding
binding.envns=('SOAP-ENV', 'http://www.w3.org/2003/05/soap-envelope')
从这里开始,一切都顺利了(对于我的服务来说)
我成功让这个工作起来了,SOAP信封是写死在 bindings.py
文件里的,这个文件存放在你电脑的 suds.egg
里面,通常在 site-packages 目录下。我把 SOAP 信封的地址改成了 http://www.w3.org/2003/05/soap-envelope
,这个地址和我的摄像头兼容。我找不到在 suds 中覆盖这个信封的命令,所以我就直接在 bindings.py 里写死了这个地址。
谢谢大家的帮助