覆盖SOAP信封在肥皂水蟒蛇
题
我有一个摄像头,我试图连接到它的可见泡沫。我试图发送原始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()])
不隶属于 StackOverflow