Отправка запроса XMLRPC с python3

я хочу сделать запрос с python и xmlrpc.

from xmlrpc.client import ServerProxy, datetime
import ssl
import hashlib

hash_object = hashlib.md5(b'USER*PASSWORD')

test = ServerProxy('https://IP/xml-rpc?de.vertico.starface.auth=%s' % hash_object.hexdigest(),
                             verbose=False, use_datetime=True, 
                             context=ssl._create_unverified_context())
print(test.Queue.getHistoryData({"queueName" : "Hauptgruppe","from" : "20161230T12:59:05", "to" : "20170701T12:59:05"}))

Тело должно быть таким:

<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
   <methodName>Queue.getHistoryData</methodName>
   <params>
      <param>
         <value>
            <struct>
               <member>
                  <name>queueName</name>
                  <value>
                     <string>testIq</string>
                  </value>
               </member>
               <member>
                  <name>from</name>
                  <value>
                     <string>20150701T12:59:05</string>
                  </value>
               </member>
               <member>
                  <name>to</name>
                  <value>
                     <string>20160701T12:59:05</string>
                  </value>
               </member>
            </struct>
         </value>
      </param>
   </params>
</methodCall>

Но я продолжаю получать следующую ошибку в результате. И я не знаю, как это исправить. Кто-нибудь может мне помочь?

xmlrpc.client.Fault: <Fault 1: 'java.lang.ClassCastException : java.lang.String
cannot be cast to java.util.Date'>

1 ответ

  1. Учитывая сообщение об ошибке, я подозреваю, что вам нужно отправить <dateTime.iso8601>теги вместо этого. Попробуйте отправить datetimeобъекты:

    import datetime
    
    test = ServerProxy(
        'https://IP/xml-rpc?de.vertico.starface.auth=%s' % hash_object.hexdigest(),
        verbose=False, use_builtin_types=True, 
        context=ssl._create_unverified_context())
    print(test.Queue.getHistoryData({
        "queueName": "Hauptgruppe",
        "from" : datetime.datetime(2016, 12, 30, 12, 59, 5),
        "to": datetime.datetime(2017, 7, 1, 12, 59, 5)}))
    

    Обратите внимание, что я переключился на использование use_builtin_typesasuse_datetime.