2016-09-08 5 views
0

Я новичок в Python и XMLRPC, и я застрял декодирования двоичных данных, поступающих от государственной службы:расшифровывает двоичный из XmlRpc питона

ответ запрос на обслуживание с помощью этого кода является:

from xmlrpc.client import Server 

import xmlrpc.client 

from pprint import pprint 

DEV_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx' 

logFile = open('stat.txt', 'w') 

s1 = Server('http://muovi.roma.it/ws/xml/autenticazione/1') 
s2 = Server('http://muovi.roma.it/ws/xml/paline/7') 

token = s1.autenticazione.Accedi(DEV_KEY, '') 

res = s2.paline.GetStatPassaggi(token) 

pprint(res, logFile) 

ответ:

{'id_richiesta': '257a369dbf46e41ba275f8c821c7e1e0', 
'risposta': {'periodi_aggregazione': <xmlrpc.client.Binary object at 0x0000027B7D6E2588>, 
       'tempi_attesa_percorsi': <xmlrpc.client.Binary object at 0x0000027B7D9276D8>}} 

мне нужно декодировать эти два двоичных объектов, и я застрял с этим кодом:

from xmlrpc.client import Server 

import xmlrpc.client 

from pprint import pprint 

DEV_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxx' 

logFile = open('stat.txt', 'w') 

s1 = Server('http://muovi.roma.it/ws/xml/autenticazione/1') 
s2 = Server('http://muovi.roma.it/ws/xml/paline/7') 

token = s1.autenticazione.Accedi(DEV_KEY, '') 

res = s2.paline.GetStatPassaggi(token) 

dat = xmlrpc.client.Binary(res) 
out = xmlrpc.client.Binary.decode(dat) 

pprint(out, logFile) 

, который заканчивается в:

Traceback (most recent call last): File "stat.py", line 18, in dat = xmlrpc.client.Binary(res) File "C:\Users\Leonardo\AppData\Local\Programs\Python\Python35\lib\xmlrpc\client.py", line 389, in init data.class.name) TypeError: expected bytes or bytearray, not dict

Единственный документ я нашел для xmlrpc.client это один на docs.python.org, но я не могу понять, как я мог бы расшифровать эти двоичные файлы

+1

Кажется, что вы делаете правильный звонок, может быть, проблема на сайте? 'TypeError: ожидаемые байты или bytearray, а не dict'? Я бы подумал, что вы на самом деле принимаете «хита» вместо «bytearray» – NeoVe

+1

да, я думаю, что это дикт. Я постараюсь связаться с разработчиком веб-сайта – Forzaferrarileo

ответ

0

Если содержание res переменной (то, что вы получаете от сервера 2 й (s2)) это ответ вы вставили в этот вопрос, то вы должны изменить последние 3 строки вашего 2 й сниппета к (как вы уже есть 2 Binary объекты в resсловаре):

# Existing code 
res = s2.paline.GetStatPassaggi(token) 

answer = res.get("risposta", dict()) 
aggregation_periods = answer.get("periodi_aggregazione", xmlrpc.client.Binary()) 
timeout_paths = answer.get("tempi_attesa_percorsi", xmlrpc.client.Binary()) 

print(aggregation_periods.data) 
print(timeout_paths.data) 

Примечания:

  • По словам [Python]: Binary Objects:

    Binary objects have the following methods, supported mainly for internal use by the marshalling/unmarshalling code:

  • я не смог подключиться (и это испытание раствора) , поскольку DEV_KEY является (очевидно) подделкой

 Смежные вопросы

  • Нет связанных вопросов^_^