acsbendi/Android-Request-Inspector-WebView

GitHub: acsbendi/Android-Request-Inspector-WebView

一个 Android 工具库,用于在 native 层完整检查和拦截从 WebView 发出的 HTTP 请求,包括 headers、cookies 和 body。

Stars: 117 | Forks: 16

# Android Request Inspector WebView [![Release](https://jitpack.io/v/acsbendi/Android-Request-Inspector-WebView.svg)](https://jitpack.io/#acsbendi/Android-Request-Inspector-WebView) 检查并拦截从 Android WebView 发送的完整 HTTP 请求(包括所有 headers、cookies 和 body)。 本项目受 [android-post-webview](https://github.com/KeejOow/android-post-webview) 和 [request_data_webviewclient](https://github.com/KonstantinSchubert/request_data_webviewclient) 的启发,并借鉴了这两个项目的部分代码。 # 安装说明 **步骤 1.** 将 JitPack 仓库添加到您的构建文件中: ``` allprojects { repositories { maven { url 'https://jitpack.io' } } } ``` **步骤 2.** 添加依赖 ``` dependencies { implementation 'com.github.acsbendi:Android-Request-Inspector-WebView:1.1.3' } ``` 在 [JitPack](https://jitpack.io/#acsbendi/Android-Request-Inspector-WebView) 上获取最新版本 # 使用说明 记录请求(默认功能): ``` val webView = WebView(this) webView.webViewClient = RequestInspectorWebViewClient(webView) ``` 手动处理请求: ``` val webView = WebView(this) webView.webViewClient = object : RequestInspectorWebViewClient(webView) { override fun shouldInterceptRequest( view: WebView, webViewRequest: WebViewRequest ): WebResourceResponse? { TODO("handle request manually based on data from webViewRequest and return custom response") return super.shouldInterceptRequest(view, webViewRequest) } } ``` 对于这两种情况,您可以选择不同的策略,以确定如何将记录的请求(包括 body)与拦截的请求进行匹配。默认情况下,仅使用 URL。如果 您想使用不同的策略,例如,当您对相同的 URL 并行发送具有 不同 body 的请求时(例如 GraphQL 查询),您可以将自定义的 `RequestMatcher` 传递给 `RequestInspectorWebViewClient` 的构造函数: ``` val webView = WebView(this) webView.webViewClient = RequestInspectorWebViewClient( webView, matcher = RequestGeneratedUuidInHeaderMatcher() ) ``` 目前可用的匹配器有 `GeneratedUuidInHeaderRequestMatcher` 和 `GeneratedUuidInUrlRequestMatcher`,它们都会在请求被记录以及从 JavaScript 发送之前生成一个 UUID 并将其添加到请求中。它们的区别仅在于将 UUID 附加到请求的方式, 是作为额外的 header 还是作为额外的查询参数。但两者都会在请求于 native 端被拦截时清理该请求,也就是在它真正发送到目标地址之前。 如果您想实现自己的匹配策略,可以实现 `RequestMatcher` 接口,并将其实例传递给 `RequestInspectorWebViewClient` 的构造函数。 # 已知限制 无法获取从 iframe 发送的请求的详细数据(例如请求 body),因为在 [Android WebView 的 iframe 中无法执行 JavaScript 代码](https://stackoverflow.com/questions/47820169/android-webview-run-javascript-in-all-frames-including-iframes)。若要检查特定 iframe 发送的请求,一种可能的变通方法是将该 iframe 的 URL 加载到另一个 `WebView` 中,并将 `RequestInspectorWebViewClient` 附加到该 `WebView` 上。 # 贡献 欢迎所有反馈、PR 和 issue! # 许可证 The MIT License 参见 [LICENSE](LICENSE)
标签:Android, DSL, HTTP请求拦截, Kotlin, SOC Prime, WebView, 后台面板检测, 开发工具, 网络请求抓包