protobuf数据解析_⽤python可视化protobuf内容
⼀、什么是protobuf
url编码和utf8区别
Protocol Buffers(简称protobuf)是⼀种轻便⾼效的结构化数据存储格式,可以⽤于结构化数据串⾏化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式,⽤于通讯协议、数据存储等领域的语⾔⽆关、平台⽆关、可扩展的序列化结构数据格式。⽬前提供了 C++、Java、Python 三种语⾔的 API。
⼆、protobuf的优缺点
(1) 优点:
protobuf以⾼效的⼆进制⽅式存储,⽐XML⼩3到10倍,快20到100倍。
平台⽆关、语⾔⽆关
⼆进制、数据字描述
提供了完整详细的操作API
(2)缺点:
可读性差:为了提⾼性能,Protobuf采⽤了⼆进制格式进⾏编码。
对于开发同学来说,在进⾏程序调试时,⼆进制格式编码阅读⽐较困难。
对于测试同学来说,查看请求或者响应中的特定编码格式的protobuf数据⽐较困难,⽆法直观看到数据。
三、python如何解析
⼩编在测试过程中接触到的protobuf⽂件中以url_16_le格式编码较多,故以此编码为例进⾏处理,借助python的codecs库可以处理此类编码,当然codecs库中还有其他编码(utf_32_le、utf_32_be、utf_16_be、utf_7、utf_8),感兴趣的⼩伙伴可以去了解下。
1、命令⾏中实现解析
2、代码中实现解析
例:解析该protobuf⽂件(其中2代表url_16_le编码格式的数据)
8 {
1 {
6: 117
}
2: “\311Q\256v”
5: 1
6: 1
}
(1) 取出url_16_le编码格式的内容,并重新转为byte类型
l2 = str(line).split('"')[1].replace('\\\\','\\')
l3 =bytes(l2,encoding="utf8")
l3输出结果为==>b’\311Q\256v’
(2) 数据处理(如图所⽰,l3输出结果解析后乱码,故需要进⼀步处理:\n\t\r禁⽌转义)
l4 =codecs.escape_decode(l3, 'hex-escape')[0]
l4输出结果为==>b’\xc9Q\xaev’(如图,处理后的数据就可以解析了哦)
(3) 数据解码
l5=codecs.utf_16_le_decode(l4)[0]
l5输出结果为==>凉⽪(将结果输出到某个⽂件就可以直观查看数据了哦)
(4) 代码总览
(5) 输出结果⽰例
四、⼩结
本⽂主要简单介绍了protobuf的概念及如何使⽤python得到可视化的数据。脚本虽简单,但在测试过程中针对每⼀个请求及响应,
基本上都能直观的看到protobuf的数据,⼤⼤的提⾼了测试效率。同学们是否还有其他的可视化的⽅法,欢迎⼤家来补充~~

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。