4

我目前正在开发一个支持 QA 或开发人员在他们的应用程序中调试网络流量的库,我们目前使用 OKHttp 并且我知道如何创建一个拦截器并将所有请求数据发送到该库。这样开发人员或 QA 可以查看此类数据(有效负载/URL/大小/响应代码/持续时间...等),但是我想创建一个更通用的解决方案来侦听 HTTP 流量甚至 TCP 流量,然后从那里获取,但是我找不到起点,我知道这是可能的,因为 Firebase Performance 正在这样做,但我仍然找不到 API 或无论如何都无法收听此类流量。

我希望 Google 的 Firebase 性能团队的某个人分享一些关于他们如何做到这一点的信息,如果这不是商业机密 :)

我遇到了这个解决方案:https ://github.com/cyruliu/Sensitive_API_Monitor/blob/master/app/src/main/java/com/android/reverse/apimonitor/NetWorkHook.java 但是它看起来有点糟糕,我希望能找到更好的方法。

4

1 回答 1

3

简短的回答:不代理整个设备是不可能的。

对于 OkHttp3,我专门在这里写了一个库:https ://github.com/shehabic/sherlock实现了一个拦截器,每次打开应用程序并捕获网络请求时都会创建一个新会话,您还可以有多个会话,它添加了一个浮动图标可帮助您访问会话和请求的历史记录以及一些导出功能,此外它还添加了一个辅助启动器图标,您可以使用该图标访问捕获请求而不会中断应用程序的进程。

关于 Firebase 性能,所有的魔力实际上都在 Firebase-Perf Gradle 插件中;为了简化它,它扫描项目的代码并替换对 OkHttpClient 的直接调用,以通过他们自己的 FirebaseOkHttpClient 进行代理,并从那里获得所有详细信息,即使是 https 请求,因为它们成为 http 客户端。

我希望这可以为将来节省一些时间。

于 2018-09-23T13:39:05.640 回答