У меня есть WS (ZOPE / PLONE), который принимает некоторые вызовы XMLRPC.
Итак, я пишу фрагмент кода Python для вызова WS и выполнения чего-либо.
Iследуйте формату сообщения, который я нашел здесь , и это мой фрагмент кода:
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 дляPython называется xmlrpclib, но я должен развиваться таким образом, потому что это пример для клиента, который не может напрямую использовать такую библиотеку