我有一个摄像头,我试图连接到它的可见泡沫。我试图发送原始XML和发现,从工作停止XML泡沫的唯一的事情是不正确的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增加,因为它是硬编码到泡沫绑定它不写的命名空间。有没有办法在泡沫覆盖此?

感谢您的帮助。

有帮助吗?

解决方案 2

我设法得到这个工作,SOAP信封是硬编码到存储在安装在您的站点包bindings.py suds.egg。我改变了SOAP信封地址http://www.w3.org/2003/05/soap-envelope。这是我的相机兼容。我无法找到一个命令覆盖该包络中的泡沫,所以我硬到bindings.py编码它。

感谢您的帮助

其他提示

我周围有通过手动重写suds.binding.envns变量bindings模块中:

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

从这里开始,一切顺利的话(用的我的的服务,这是)

手动更新binding.py肯定是不正确的方式去。您应该能够利用ImportDoctor覆盖默认绑定。看看为打破固定模式皂液网站上的文档。

此外,Python和泡沫的版本你使用的是什么?

from suds.client import Client
from suds.plugin import MessagePlugin

WSDL_url = "my_url?wsdl"

class MyPlugin(MessagePlugin):
    def marshalled(self, context):
        #print(str(context.envelope))
        context.envelope.nsprefixes['SOAP-ENV']='myText'

client = Client(WSDL_url, plugins=[MyPlugin()])
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top