在Charles中支持协议缓冲区
原文地址:
原文作者:
发布时间:2020年9月19日-3分钟阅读
我几乎只用Charles来满足我所有的网络调试需求。从调试未发布的API到测试缓慢的互联网节流场景,它一直是我的网络精灵,是我在嗅探重新包装的移动应用所做的网络调用时的兄弟。它已经证明了自己是一个可靠的工具,经受住了时间的考验,直到我遇到了Google的协议缓冲器。
迎接我的是这种令人厌恶的观点。作为一个开发者,我理解protobuf作为二进制协议带来的所有好处,但这是最大的缺点之一。不能被人类阅读,使得它成为调试东西时最难操作的协议之一。
值得庆幸的是Charles有内置的protobuf支持,它可以帮助我们解决这个问题,最终得到一个凡人都能理解的、可读的输出。这篇文章介绍了如何设置Charles来理解protobuf响应。
准备魔药
Protobuf描述符
描述符本质上包含的信息与.proto文件中的信息一模一样,其类型使这些信息在其他工具和可编程语言中可以被访问。
让我们用一个简单的protobuf文件来工作吧
syntax = "proto3";
option java_package = "com.example.protobuf";
message Response {
int32 id = 1;
string label = 2;
}
我选择的工作语言是Java以及Gradle构建系统。为了生成这种组合的描述符文件,必须对build.gradle文件进行以下修改。你可以在这里找到其他语言的相关文档。
protobuf {
...
generateProtoTasks {
all().each { task ->
...
task.generateDescriptorSet = true
task.descriptorSetOptions.path = ...
task.descriptorSetOptions.includeSourceInfo = true
task.descriptorSetOptions.includeImports = true
}
}
}
- generateDescriptorSet生成一个描述符集文件。默认文件名是descriptor_set.desc。
- descriptorSetOptions.path 指定生成描述符文件的路径。默认值是sourceSet。
- descriptorSetOptions.includeSourceInfo 描述符集将包含行号信息和注释。
- descriptorSetOptions.includeImports描述符集将包含所有的转义导入,因此是自足的。
现在运行
./gradlew clean build
如果使用默认值运行,你应该在sourceSet文件夹下有一个descriptor_set.desc文件。
给Charles一个Protobuf Booster(原形助推器)
- 在查尔斯的 "视图 "菜单下选择 "查看器映射"。
- 启用Viewer Mappings并添加一个新的映射并选择响应类型为协议缓冲区。
- 单击 "打开描述符注册表",添加生成的描述符文件
- 从信息类型的下拉菜单中选择合适的信息类型。
体验神奇
瞧!我们的响应信息现在显示了所有键与各自的值的映射。现在,我们的响应消息显示了所有的键与它们各自的值的映射。
这只是Charles与protobuf的其中一种使用方式。请在这里详细了解所有的可能性。
通过www.DeepL.com/Translator(免费版)翻译