Перезаписать мыльный конверт на питоне Suds

У меня есть камера, и я пытаюсь подключиться к ней через пену. Я попытался отправить сырой 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 ответа

Решение

Мне удалось заставить это работать, мыльный конверт жестко закодирован в bindings.py что хранится в suds.egg Установленные в вашем сайте пакеты. Я изменил адрес конверта SOAP на http://www.w3.org/2003/05/soap-envelope, Это было совместимо с моей камерой. Мне не удалось найти команду для перезаписи этого конверта в s uds, поэтому я жестко закодировал его в 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 переопределить привязки по умолчанию. Ознакомьтесь с документацией по исправлению неисправных схем на веб-сайте 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()])
Другие вопросы по тегам