2012-02-08 17 views
0

XMLRPC呼び出しを受け入れるWS(ZOPE/PLONE)があります。XML-RPCメッセージ形式の問題

私はWSへの呼び出しを行い、何かするためのコードのPythonスニペットを書いています。

私はhereを見つけmessaggeフォーマットに従ってください、そしてそれは、コードの私の抜粋です:

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をは、要求から省略されました。すべての必須パラメーターを指定して、要求を再試行してください。

このようなパラメータは渡されません。

私はそのように<string></string>に(paramsと呼ばれる)私のパラメータをラップすることによって、私のスニペットを変更する場合:

xmlrpc_envelope = '<?xml version="1.0"?>'\ 
         '<methodCall>'\ 
         '<methodName>easyram</methodName>'\ 
          '<params>'\ 
          '<param>'\ 
           '<value><string>%s</string></value>'\ 
          '</param>'\ 
          '</params>'\ 
         '</methodCall>'  

何かが起こるが、私が欲しいものではありません。実際には私のパラメータの結果は空になります(または好きな場合は無効です)。

アイデアや提案はありますか?

PSは:私はそれがxmlrpclibと呼ばれるPython用XML-RPCライブラリーが存在する知っているが、これは直接その

のようなライブラリを使用することはできませんクライアントの一例ですので、私は、そのように開発する必要があります

答えて

0

私はただ解決しました。

私はこのような機能を追加した場合:

def escape(s, replace=string.replace): 
s = replace(s, "&", "&amp;") 
s = replace(s, "<", "&lt;") 
return replace(s, ">", "&gt;",) 

と私はような何かconnectionメソッドを呼び出す前に:その後、すべてがうまくいけ

params = escape(params) 

を。

将来のために役立つことを望む希望