从xmlrpc python解码二进制文件

时间:2016-09-08 01:33:12

标签: python python-3.x xml-rpc xmlrpclib xmlrpcclient

我是python和xml-rpc的新手,而且我很难解码来自公共服务的二进制数据:

使用此代码的服务请求响应是:

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(最近一次调用最后一次):文件“stat.py”,第18行,in          dat = xmlrpc.client.Binary(res)文件“C:\ Users \ Leonardo \ AppData \ Local \ Programs \ Python \ Python35 \ lib \ xmlrpc \ client.py”,   第389行,在 init 中       data。 class name )TypeError:expect bytes或bytearray,not dict

我为xmlrpc.client找到的唯一文档是docs.python.org上的文档,但我无法弄清楚如何解码这些二进制文件

1 个答案:

答案 0 :(得分:0)

如果res变量的内容(您从2 nd s2)服务器获得的内容)是您粘贴到问题中的答案,那么您应该修改2 nd 代码段的最后3行(因为Binary 词典中已有2 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
      

    二进制对象具有以下方法,编组/解组编码支持主要供内部使用

  • 我无法连接(此测试解决方案),因为DEV_KEY显然是假的