我是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上的文档,但我无法弄清楚如何解码这些二进制文件
答案 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)
备注强>:
二进制对象具有以下方法,编组/解组编码支持主要供内部使用:
DEV_KEY
显然是假的