Charles解析protobuf之初探

前言

在程序開發以及網絡通訊傳輸過程當中最多見的數據格式就是JSON、XML,或者是一種壓縮效率更高的數據格式——Google的ProtoBuf。ProtoBuf在傳輸過程當中是以二進制的格式傳輸的,測試抓包的時候若是須要查看請求或返回消息中攜帶的參數信息就須要對它進行解析。小編以前在Windows環境下使用公司童鞋開發的Fiddler插件能夠完成解析工做,但小編在家辦公使用的抓包工具是Mac上的Charles。對於不熟悉Charles的小編而言,如何藉助Charles來解析並展現ProtoBuf中的內容就尤其重要。本文就介紹一下小編嘗試的幾種在Mac環境中將ProtoBuf數據流轉換爲能夠直觀觀察的數據格式的方法。。瀏覽器

1
ProtoBuf簡介

服務器

Protocol buffers是一種語言無關、平臺無關、可擴展的序列化結構數據的方法,它可用於(數據)通訊協議、數據存儲等。微信

Protocol Buffers是一種靈活,高效,自動化機制的結構數據序列化方法-可類比XML,可是比XML更小(3~10倍)、更快(20~100倍)、更爲簡單。網絡

你能夠定義數據的結構,而後使用特殊生成的源代碼輕鬆的在各類數據流中使用各類語言進行編寫和讀取結構數據。你甚至能夠更新數據結構,而不破壞由舊數據結構編譯的已部署程序。數據結構

app

2
Charles簡介

less

Charles實際上是一款代理服務器,經過成爲電腦或者瀏覽器的代理,而後截取請求和請求結果達到分析抓包的目的。該軟件是用Java寫的,可以在Windows、Mac、Linux上使用,安裝Charles的時候要先裝好Java環境。Charles的具體安裝方法就不在此詳細展開了,可是Charles應該算是Mac上最好用的抓包工具了。下面詳細介紹下使用Charles查看PB文件的方法。編輯器

工具

3
方法一:Charles的Rewrite功能

測試

經過閱讀Charles關於ProtoBuf的官方文檔能夠得出當Content-Type的類型爲application/x-protobuf時,經過Charles查看內容可使用兩個新的HTTP正文內容查看器,Protobuf文本查看器和Protobuf結構化查看器。可是小編在測試過程當中發現咱們的請求的Content-type並非application/x-protobuf的,而是text/plain; charset=utf-8的,因此考慮使用Charles的Rewrite功能將Content-type修改替換一下。

正常看到的請求以下圖所示:

打開Tools->Rewrite界面配置,新增配置以下:

其中規則的詳細配置是:

配置完成以後再去請求就能夠看到Content-Type以下圖所示。

此時就能夠在Contents中看到對應的ProtoBuf以及ProtoBuf Text內容了。

        須要注意的是使用這種方式查看到的都是ProtoBuf裏的value內容,沒有對應的key,因此可讀性較差,下面介紹可讀性更強的第二種方式。

4
方法二:Charles解析PB功能

1、生成ProtoBuf的.desc解析文件

protoc工具安裝:若是想解析一個ProtoBuf數據流,就必需要有對應的.proto文件,Charles須要一個.proto文件轉換的.desc文件才能完成後續的解析工做。首先須要在Mac上安裝protoc工具:brew install protobuf。

執行protoc --version可以展現如下內容就表明protoc工具安裝成功了。

單個proto文件生成.desc文件將proto_test.proto文件放到固定路徑/xx/下,而後執行命令:protoc -I=/xx/ --descriptor_set_out=/xx/proto_test.desc /xx/proto_test.proto就能夠在對應路徑下生成proto_test.desc文件了。

多個proto文件生成.desc文件:多個proto文件對應生成一個desc文件命令:protoc -I=/x/xx/ --descriptor_set_out=/x/xx/test.desc /x/xx/a.proto /x/xx/b.proto。


2、解析ProtoBuf格式

PB文件未解析時的Request和Response內容以下,能夠看到基本全是亂碼,可讀性極差,經過添加以前生成的.desc文件並配置解析規則就完成PB文件的解析工做,步驟以下:

View Request/Response As:在對應的請求上右鍵選擇View Request(Response) As->Protocol Buffers。

添加.desc文件:進入Charles提供的解析ProtoBuf的配置界面後,可經過點擊Open Descriptot Registry將本身的ProtoBuf描述性文件(.desc文件)註冊進去。

Descriptor Registry有兩個默認支持的desc描述文件,咱們可經過點擊add添加本身須要的desc文件。

配置message type添加成功後,能夠在Message type中搜索須要解析的消息體對應的ProtoBuf Message,並配置對應的payload encoding。

   設置成功後,能夠經過ProtoBuf以及ProtoBuf Text兩種方式查看PB數據,其中ProtoBuf Text能夠看到二進制的消息體已經轉換爲能夠直觀查看的相似JSON的數據體了,到此爲止簡單的PB數據解析工做就告一段落了。


5
Charles的相關配置

Viewer Mappings功能View Request/Response As功能只能設置單一請求的request body或者response body的proto解析,但若是是批量請求的解析須要進行大量的重複性工做,比較繁瑣,具備較差的便利性,此時可經過Viewer Mappings功能解決該問題。

Protobuf Settings功能desc文件的添加不只能夠經過Viewer Mappings功能和View Request/Response As功能,還能夠經過菜單欄上的Protobuf Settings功能進行設置。

好啦,上述內容就是小編關於Charles查看PB數據格式請求的初探索,謝謝各位童鞋的閱讀~

◆  ◆  ◆  ◆  ◆ 

本期編輯 / sufflower


本文分享自微信公衆號 - 搜狗測試(SogouQA)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索