如何使用Flutter WebView代理方法获取URL请求头数据?
解决webview_flutter获取请求头的问题
webview_flutter的navigationDelegate回调接收的NavigationRequest对象,本身就包含请求头信息,你可以直接用它来实现URL与请求头的组合判断逻辑。
具体修改实现
- 更新你的
_interceptNavigation方法,参数替换为NavigationRequest,通过它获取URL和请求头:
NavigationDecision _interceptNavigation(NavigationRequest request) { final targetUrl = request.url; final requestHeaders = request.headers; // 按你的业务逻辑判断:比如匹配登录重定向URL if (targetUrl == "<你的登录重定向URL>") { // 检查请求头中的关键标识 if (requestHeaders.containsKey("X-Auth-Success")) { final authToken = requestHeaders["X-Auth-Success"]; // 执行移动端API调用、关闭WebView等操作 _processAuthSuccess(authToken); return NavigationDecision.prevent; // 阻止页面继续加载 } } return NavigationDecision.navigate; // 允许正常导航 }
- 关键注意点:
NavigationRequest仅捕获页面级导航请求(比如跳转新页面、刷新),页面内的AJAX、资源加载请求无法通过此方式拦截- 如果需要捕获所有网络请求(包括异步请求),需要依赖平台特定API:
- Android端:通过
AndroidWebViewController自定义WebViewClient,重写shouldInterceptRequest方法获取所有请求详情 - iOS端:通过
WKWebViewController设置WKNavigationDelegate,重写webView(_:decidePolicyFor:decisionHandler:)获取请求信息
- Android端:通过
- 若你的登录成功标识在响应头而非请求头中,
NavigationRequest无法获取,此时需要用平台端的响应拦截方法(比如Android的onReceivedHeaders、iOS的didReceive回调)
内容的提问来源于stack exchange,提问作者propstm
相关产品推荐
相关产品推荐

