如何解析别人接口中返回的 protobuf 呢

2019-12-04 16:07:59 +08:00
 wersonliu9527

通过 charles 抓包,接口返回 protobuf.通过 requests 构造这个请求,返回啥都没有但状态吗 200. 可能有老哥看到这个结构就知道我在爬哪个了.看破不说破哈 0.0

6336 次点击
所在节点    Python
8 条回复
dreamerlv3ex
2019-12-04 16:27:53 +08:00
看不懂
wersonliu9527
2019-12-04 16:34:46 +08:00
@dreamerlv3ex 一般接口返回都是 json 数据,但是这个接口返回的是 protobuf,不知道怎么解析
keepeye
2019-12-04 16:35:54 +08:00
这不就是 protoc --decode_raw 结果吗

大部分情况下也足够了,如果要知道每个字段含义,那必须得有 protobuf 定义文件才行

你抓的是 vx?
wersonliu9527
2019-12-04 16:47:37 +08:00
@keepeye 不是 vx, 这个老版本是 json,新版本是 protobuf.理论上能够对着老版本 json 结构把这个.proto 文件定义好吧? 但是再怎么解析呢, requests 脚本 content,text 都是空
keepeye
2019-12-04 17:05:45 +08:00
@wersonliu9527 你可以把二进制 16 进制字符串拷出来,然后参考 json 定义 protobuf 消息(字段不用全定义),写个脚本解析一下试试
nxy006
2019-12-05 10:00:08 +08:00
必须要有 protobuf 的定义(.proto 文件),再把这个问题编译成类( Java、Python、C++等都支持)。以 Java 为例,调用 GenClass.parseFrom(response.toByteArray()); 方法就可以获得结果的实例,具体参数的值可以调 get 方法获得。
sanget
2019-12-05 10:15:28 +08:00
protobuf 是加密过的,没有原 .proto 文件基本翻译不出来。
locoz
2019-12-05 10:42:45 +08:00
翻源码找到它的 protobuf 解析部分( proto 文件转换的对应语言的代码)然后照着定义成 proto 文件再转回 python 版本

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/625911

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX