簡體   English   中英

在Suds python中覆蓋Soap Envelope

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM