【客户端测试】当客户端直接调用grpc接口时,抓包和mock测试

部分业务会直接在APP上调用grpc接口,并非我们常见的HTT P系列接口。

一、Charles工具:

可以抓grpc接口,但是需要复杂繁琐的解析过程~~
以下是在Charles中抓取gRPC接口流量的步骤:
这部分转载来自我的好友:背着键盘的女侠
https://blog.csdn.net/qq_40297562/article/details/135938813

1.1 使用Charles抓取grpc接口步骤:

1、启用HTTP/2协议:

在Charles中,点击“Proxy” -> “HTTP/2”。
确保“Enable HTTP/2”选项已勾选。

2、配置SSL代理:

打开Charles,进入菜单栏的“Proxy” -> “SSL Proxying Settings”。
添加一个新的SSL代理位置,Port默认为443,host为*即可。

3、启用SSL代理:

在Charles中,点击“Proxy” -> “Enable SSL Proxying” -> “Enable SSL Proxying”。
确保你已经信任Charles的根证书。你可以在“Help” -> “SSL Proxying” -> “Install Charles Root Certificate”中找到并安装根证书。

4、重新启动Charles:

如果你在配置过程中有所更改,重新启动Charles以确保设置生效。

5、抓取gRPC流量:

在Charles中,你应该能够看到gRPC请求和响应的流量。
可以通过过滤器或搜索来找到与gRPC相关的请求。

6、确认你可以抓到请求:如下图看到context-type为grpc即可:

在这里插入图片描述

1.2 解析Charles的二进制数据:

1、通过grpcurl解析二进制数据的方法本次就不赘述,有兴趣的可以参考以下操作(笔者未实践请大家做参考,来源于chatgpt的回答):

使用 grpcurl 解析请求:

打开终端,执行以下命令来解析 gRPC 请求:

grpcurl -plaintext -import-path /path/to/protos -proto your_service.proto -format json example.com:50051 your_service/method_name < request_data.bin

替换 /path/to/protos 为你的 .proto 文件所在的路径。
替换 your_service.proto 为你的服务定义文件名。
替换 example.com:50051 为你的 gRPC 服务地址和端口。
替换 your_service/method_name 为实际的 gRPC 方法名。
request_data.bin 是保存的 gRPC 请求的二进制数据文件。

使用 grpcurl 解析响应:

同样,执行以下命令来解析 gRPC 响应:

grpcurl -plaintext -import-path /path/to/protos -proto your_service.proto -format json example.com:50051 your_service/method_name < response_data.bin

替换相应的参数,包括 /path/to/protos、your_service.proto、example.com:50051、your_service/method_name 和 response_data.bin。
通过上述步骤,你应该能够使用 grpcurl 解析 Charles 保存的 gRPC 二进制文件,并将其转换成 JSON 格式。确保路径、文件名和 gRPC 相关的信息是正确的。

2、通过charles中配置解析ProtoBuf格式

首先,需要做前置工作:把你的proto文件生成desc文件为了给charles配置规则用。

具体操作如下:

1.brew install protobuf执行成功后输入命令检查安装是否成功protoc --version,出现以下截图就是成功啦~
在这里插入图片描述
2.执行命令生成desc文件:protoc -I=/本地proto文件的路径/ --descriptor_set_out=/本地要生成desc文件的存储路径/xxx.desc /本地proto文件的路径/xxx.proto

执行后没有报错就是生成成功,到存储路径看到文件即可啦~

这边失败的情况有很多,比如笔者遇到的报错基本是proto文件中import的包都是远程的解析的时候读取不到(可以把包文件存在本地地址并修改import地址或者确认没有用到这个包就直接注释掉),大家遇到了按照报错解决就行~

3.配置charles的protocol setting:

选择抓到的grpc接口右键选择配置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
把刚才生成的desc文件导入匹配,自动会识别出type,选择对应的方法即可。

重新请求方法即可看到最新的解析信息啦~

二、mitmproxy:

mitmproxy不需要这么复杂的解析过程,直接抓取即可使用。

2.1 使用mitmproxy抓取grpc接口步骤:

1、安装:

下载解压后双击 bmitmproxy 文件即可打开程序,如果使用源码安装的话可以在控制台输入 bmitmproxy 启动程序。
常见问题:
在 macOS 可能提示软件来自未认证的开发者,可以通过右键→打开的方式授予权限。

2、配置:
  1. 连接移动设备:mitmproxy 会自动监听在 8888 端口,可以通过点击左侧的「Inspector」按钮进入 mitmproxy
    的主界面。
  2. 将移动设备的代理地址设为当前电脑地址,默认端口为 8888,如果有多个 IP 地址的话以公司内网的地址为准。
  3. 被测设备上用浏览器打开 http://mitm.it,选择对应操作系统安装证书。
  4. 信任刚刚安装的证书。
  5. 更详细的证书的安装与信任可以参考 mitmproxy
    的官方文档:https://docs.mitmproxy.org/stable/concepts-certificates/。

2.1 注意点分享:

1、安卓证书安装和信任:

IOS设备完全按照手册可以顺利使用,安卓设备需要注意的地方:
1、安装的证书需要安装ca证书类型;
2、如果不确定自己证书有没有安装成功,可以去信任的证书列表看用户tab下有没有mitmproxy。

1、mock配置:

mock请求响应的时候路径不用带上域名。
/XXXX 部分即可

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值