У меня есть WS (ZOPE/PLONE), которые принимают некоторые вызовы XMLRPC.Ошибка формата сообщения XML-RPC
Итак, я пишу фрагмент кода python для вызова WS и сделаю что-нибудь.
Я следую messagge формат, который я нашел here, и это мой фрагмент кода:
import httplib
def queryInventory():
try:
xmlrpc_envelope = '<?xml version="1.0"?>'\
'<methodCall>'\
'<methodName>easyram</methodName>'\
'<params>'\
'<param>'\
'<value>%s</value>'\
'</param>'\
'</params>'\
'</methodCall>'
params = '<EasyRAM>'\
'<authentication><user>EasyRAM</user><pwd>EasyRAM</pwd><hotel>52</hotel></authentication>'\
'<operation type="QueryInventory" rate="master"><date from="2012-03-10" to="2012-03-10" /><date from="2012-03-22" to="2012-03-22" /></operation>'\
'</EasyRAM>'
data = xmlrpc_envelope % params
print data
headers = {"Content-type": "text/xml"}
conn = httplib.HTTPSConnection('myHost')
aa = '/ws/xmlrpc/public/EasyRAM'
conn.request("POST", aa, data, headers)
response = conn.getresponse()
print "EasyRAM.queryInventory() response: status=%s, reason=%s" % (response.status, response.reason)
print "EasyRAM.queryInventory() response=%s" % response.read()
conn.close()
except Exception, ss:
print "EasyRAM.queryInventory() -> Error=%s" % ss
raise
return ''
queryInventory()
Проблема заключается в том, что я получаю следующее сообщение об ошибке:
Неверный запрос параметра Params , был исключен из запроса. Обязательно укажите все необходимые параметры и повторите запрос.
Как параметр не передается.
Если я изменить мой сниппет, обернув мой параметр (называемый params
) в <string></string>
таким образом:
xmlrpc_envelope = '<?xml version="1.0"?>'\
'<methodCall>'\
'<methodName>easyram</methodName>'\
'<params>'\
'<param>'\
'<value><string>%s</string></value>'\
'</param>'\
'</params>'\
'</methodCall>'
что-то случится, но это не то, что я хочу; на самом деле мой параметр приводит к пустому (или пустому, если хотите).
Любые идеи или предложения?
PS .: Я знаю, что существует библиотека XML-RPC для питона называется XMLRPCLIB, но я должен развиваться таким образом, потому что это пример для клиента, который не может непосредственно использовать библиотеку как тот