7

我有一个相机,我正在尝试连接它以防止泡沫。我尝试发送原始 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 绑定中。有没有办法在泡沫中覆盖它?

谢谢你的帮助。

4

4 回答 4

6

我通过手动覆盖模块suds.binding.envns中的变量来解决它bindings

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

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

于 2013-01-29T09:48:03.740 回答
3

我设法让这个工作,肥皂信封被硬编码到bindings.py存储在suds.egg安装在您的站点包中。我将 SOAP 信封地址更改为http://www.w3.org/2003/05/soap-envelope. 这与我的相机兼容。我找不到在 suds 中覆盖这个信封的命令,所以我将它硬编码到 bindings.py 中。

谢谢你的帮助

于 2010-03-30T14:22:50.567 回答
1

手动更新binding.py绝对不是正确的方法。您应该能够利用ImportDoctor来覆盖您的默认绑定。查看Suds 网站上修复损坏模式的文档。

另外,您使用的是什么版本的 Python 和 suds?

于 2010-04-02T23:49:51.137 回答
1
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()])
于 2016-04-15T12:01:10.400 回答