الكتابة فوق مغلف الصابون في Python suds
سؤال
لدي كاميرا وأحاول الاتصال بها. لقد حاولت إرسال RAW XML ووجدت أن الشيء الوحيد الذي يمنع SUDS XML من العمل هو مساحة اسم مظروف الصابون غير صحيحة.
مساحة اسم الظرف هي:
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
وأريد إعادة كتابته إلى:
xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope"
من أجل إضافة مساحة اسم في بيثون ، أحاول هذا الرمز:
message = Element('Element_name').addPrefix(p='SOAP-ENC', u='www.w3.org/ENC')
ولكن عندما أضيف SOAP-ENV
إلى مساحة الاسم ، لا تكتب لأنه يتم ترميزه في روابط Suds. هل هناك طريقة للكتابة فوق هذا في SUDS؟
شكرا على اي مساعدة.
المحلول 2
تمكنت من الحصول على هذا العمل ، يتم ترميز مظروف الصابون bindings.py
تم تخزينه في suds.egg
مثبتة في حزم موقعك. لقد غيرت عنوان مغلف الصابون إلى http://www.w3.org/2003/05/soap-envelope
. كان هذا متوافقًا مع الكاميرا. لم أتمكن من العثور على أمر للكتابة فوق هذا الظرف في Suds ، لذا قمت بترميزه بشدة إلى 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()])