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 [](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, 后台面板检测, 开发工具, 网络请求抓包