سؤال

لدي كاميرا وأحاول الاتصال بها. لقد حاولت إرسال 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()])
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top