可以通过在 WebViewClient 中重写 'shouldInterceptRequest' 方法来拦截 WebView 的请求并获取其结果。具体实现步骤如下:

  1. 创建一个自定义的 WebViewClient 类,并重写 'shouldInterceptRequest' 方法。
public class MyWebViewClient extends WebViewClient {
    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
        // 在这里拦截请求并获取结果
        return super.shouldInterceptRequest(view, request);
    }
}
  1. 将自定义的 WebViewClient 设置给 WebView 对象。
WebView webView = findViewById(R.id.webview);
webView.setWebViewClient(new MyWebViewClient());
  1. 在 'shouldInterceptRequest' 方法中,可以通过 HttpURLConnection 或 OkHttp 等网络库来发送请求并获取结果。
public class MyWebViewClient extends WebViewClient {
    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
        // 发送请求获取结果
        HttpURLConnection connection = null;
        try {
            URL url = new URL(request.getUrl().toString());
            connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod(request.getMethod());
            connection.setDoInput(true);
            connection.setDoOutput(true);
            // 添加请求头
            for (Map.Entry<String, String> entry : request.getRequestHeaders().entrySet()) {
                connection.setRequestProperty(entry.getKey(), entry.getValue());
            }
            // 发送请求
            connection.connect();
            // 获取响应结果
            InputStream inputStream = connection.getInputStream();
            String contentType = connection.getContentType();
            String encoding = connection.getContentEncoding();
            WebResourceResponse response = new WebResourceResponse(contentType, encoding, inputStream);
            return response;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                connection.disconnect();
            }
        }
        return super.shouldInterceptRequest(view, request);
    }
}

注意:在 Android 7.0 及以上版本,如果请求的 URL 使用了非安全的 HTTP 协议,应该在 AndroidManifest.xml 文件中添加以下代码以允许应用程序发送非安全的网络请求:

<application
  ...
  android:usesCleartextTraffic="true">
  ...
</application>
Android WebView 不拦截请求,获取所有请求结果方法

原文地址: https://www.cveoy.top/t/topic/odS0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录