[API翻译]Charles ❤ Protobuf

1,334 阅读2分钟

在Charles中支持协议缓冲区

原文地址:

原文作者:

发布时间:2020年9月19日-3分钟阅读

image.png

我几乎只用Charles来满足我所有的网络调试需求。从调试未发布的API到测试缓慢的互联网节流场景,它一直是我的网络精灵,是我在嗅探重新包装的移动应用所做的网络调用时的兄弟。它已经证明了自己是一个可靠的工具,经受住了时间的考验,直到我遇到了Google的协议缓冲器。

image.png

迎接我的是这种令人厌恶的观点。作为一个开发者,我理解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 指定生成描述符文件的路径。默认值是generatedFilesBaseDir/generatedFilesBaseDir/sourceSet。
  • descriptorSetOptions.includeSourceInfo 描述符集将包含行号信息和注释。
  • descriptorSetOptions.includeImports描述符集将包含所有的转义导入,因此是自足的。

现在运行

./gradlew clean build

如果使用默认值运行,你应该在generatedFilesBaseDir/generatedFilesBaseDir/sourceSet文件夹下有一个descriptor_set.desc文件。


给Charles一个Protobuf Booster(原形助推器)

  • 在查尔斯的 "视图 "菜单下选择 "查看器映射"。

image.png

  • 启用Viewer Mappings并添加一个新的映射并选择响应类型为协议缓冲区。

image.png

  • 单击 "打开描述符注册表",添加生成的描述符文件

image.png

  • 从信息类型的下拉菜单中选择合适的信息类型。

image.png


体验神奇

瞧!我们的响应信息现在显示了所有键与各自的值的映射。现在,我们的响应消息显示了所有的键与它们各自的值的映射。

image.png

这只是Charles与protobuf的其中一种使用方式。请在这里详细了解所有的可能性。


通过www.DeepL.com/Translator(免费版)翻译