Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 29, 2014 07:42:51

kirigal
Зарегистрирован: 2014-10-29
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

SUDS и кавычки.

Приветствую всех.
Есть задача написать простенький скрипт для выполнения Soap запросов. Для решения данной задачи использую SUDS/
Проблема в том что один из передаваемых параметров содержит кавычки которые не хотят передаваться. В питоне я пару дней всего. Поэтому надеюсь на вашу помощь.
Пример кода.

from suds.client import Client
from suds.sax.element import Element
from suds.plugin import MessagePlugin
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.client').setLevel(logging.DEBUG)
url_wsdl = 'http://10.45.0.79:8072/Broker.svc?singleWsdl'
class FixEnvelope(MessagePlugin):
    def marshalled(self, context):
        #modify this line to reliably find the "recordReferences" element
        context.envelope[1].setPrefix('ns0')
client=Client(url_wsdl, plugins=[FixEnvelope()])
print client
tel = 890XXXX0099
var = '{phone : \'%s \',name: \'test\'}'% (tel)
       
params = client.factory.create('ExecProcV2')
params.contextId = '5cc62707-7da7-431b-aa96-1674740b9076'
params.classCode = 'TP_CALLBACK'
params.procCode = 'callbackset'
params.parameters = "{phone : '%s,name:' 'test'}"% (tel)
params.varParams = '{}' 
print params
response = client.service.ExecProcV2(params)
print response]


В дебаге получаю следующую xml

DEBUG:suds.client:sending to (http://10.45.0.79:8072/Broker.svc)
message:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns0="http://Broker/Service" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header/>
   <ns1:Body>
      <ns0:ExecProcV2>
         <ns0:contextId>
            <ns0:contextId>5cc62707-7da7-431b-aa96-1674740b9076</ns0:contextId>
            <ns0:classCode>TP_CALLBACK</ns0:classCode>
            <ns0:procCode>callbackset</ns0:procCode>
            <ns0:parameters>{phone : &apos;896XXXXXX99,name:&apos; &apos;test&apos;}</ns0:parameters>
            <ns0:varParams>{}</ns0:varParams>
         </ns0:contextId>
      </ns0:ExecProcV2>
   </ns1:Body>
</SOAP-ENV:Envelope>
DEBUG:suds.client:headers = {'SOAPAction': '"http://MBroker/Service/IBrokerService/ExecProcV2"', 'Content-Type': 'text/xml; charset=utf-8'}
ERROR:suds.client:<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns0="http://MBroker/Service" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header/>
   <ns0:Body>
      <ns0:ExecProcV2>
         <ns0:contextId>
            <ns0:contextId>5cc62707-7da7-431b-aa96-1674740b9076</ns0:contextId>
            <ns0:classCode>TP_CALLBACK</ns0:classCode>
            <ns0:procCode>callbackset</ns0:procCode>
            <ns0:parameters>{phone : &apos;896XXXXXX99,name:&apos; &apos;test&apos;}</ns0:parameters>
            <ns0:varParams>{}</ns0:varParams>
         </ns0:contextId>
      </ns0:ExecProcV2>
   </ns0:Body>
</SOAP-ENV:Envelope>
Соответственно вместо &apos нужно получить кавычки

Отредактировано kirigal (Окт. 29, 2014 07:43:22)

Офлайн

#2 Окт. 29, 2014 10:53:15

GreyZmeem
От: Киев
Зарегистрирован: 2013-12-03
Сообщения: 147
Репутация: +  34  -
Профиль   Отправить e-mail  

SUDS и кавычки.

Решение проблемы неоднозначности разметки
Predefined entities in XML
Апостроф это спец символ и XML парсер должен автоматически его конвертировать. Т.е. вам не надо ничего дополнительно делать. Если что-то не работает, то скорей всего не из-за этого.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version