Android WebView 不拦截请求,获取所有请求结果方法
可以通过在 WebViewClient 中重写 'shouldInterceptRequest' 方法来拦截 WebView 的请求并获取其结果。具体实现步骤如下:
- 创建一个自定义的 WebViewClient 类,并重写 'shouldInterceptRequest' 方法。
public class MyWebViewClient extends WebViewClient {
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
// 在这里拦截请求并获取结果
return super.shouldInterceptRequest(view, request);
}
}
- 将自定义的 WebViewClient 设置给 WebView 对象。
WebView webView = findViewById(R.id.webview);
webView.setWebViewClient(new MyWebViewClient());
- 在 '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>
原文地址: https://www.cveoy.top/t/topic/odS0 著作权归作者所有。请勿转载和采集!