乐闻世界logo
搜索文章和话题

WebView中如何拦截和修改网络请求?

2026年3月7日 12:24

WebView中的网络请求拦截可以通过以下方式实现:

  1. Android实现方式

    shouldInterceptRequest方法

    java
    webView.setWebViewClient(new WebViewClient() { @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { // 拦截请求,返回自定义响应 return new WebResourceResponse("text/html", "utf-8", inputStream); } @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { // 更详细的请求信息 String url = request.getUrl().toString(); String method = request.getMethod(); Map<String, String> headers = request.getRequestHeaders(); // 处理请求... } });
  2. iOS实现方式

    WKNavigationDelegate

    swift
    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { // 拦截导航请求 if let url = navigationAction.request.url { // 处理URL... } decisionHandler(.allow) }

    URLProtocol(已废弃)

    • 可以拦截所有网络请求
    • 需要注册自定义URLProtocol
    • 注意:WKWebView不支持URLProtocol
  3. 应用场景

    • 资源替换:替换本地资源,减少网络请求
    • 请求修改:修改请求头、请求参数
    • 响应修改:修改响应内容
    • 缓存控制:实现自定义缓存策略
    • 安全过滤:拦截恶意请求
    • 数据统计:统计网络请求
    • Mock数据:开发阶段使用Mock数据
  4. 注意事项

    • 性能影响:拦截会增加请求处理时间
    • 内存管理:注意及时释放资源
    • 线程安全:在正确的线程处理请求
    • 错误处理:妥善处理异常情况
    • HTTPS证书:处理自签名证书等问题
  5. 高级用法

    • 使用OkHttp拦截器(Android)
    • 实现请求重试机制
    • 实现请求优先级控制
    • 实现请求去重
    • 实现请求限流
标签:Webview