[英]Overwrite the Soap Envelope in Suds python
我有一個相機,我正試圖連接它與泡沫。 我試圖發送原始的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綁定中。 有沒有辦法在泡沫中覆蓋這個?
謝謝你的幫助。
我通過手動覆蓋bindings
模塊中的suds.binding.envns
變量來解決它:
from suds.bindings import binding
binding.envns=('SOAP-ENV', 'http://www.w3.org/2003/05/soap-envelope')
從這里開始,一切順利( 我的服務,即)
我設法讓這個工作,soap信封被硬編碼到bindings.py
,存儲在你的site-packages中安裝的suds.egg
中。 我將SOAP信封地址更改為http://www.w3.org/2003/05/soap-envelope
。 這與我的相機兼容。 我無法在suds中找到覆蓋此信封的命令,因此我將其硬編碼到bindings.py中。
謝謝你的幫助
手動更新binding.py
肯定不是正確的方法。 您應該能夠利用ImportDoctor
覆蓋默認綁定。 在Suds網站上查看修復損壞模式的文檔。
另外,你使用的是什么版本的Python和suds?
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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.