实现Android WebView拦截并获取POST请求参数的两种方法
115 浏览量
更新于2024-08-29
收藏 268KB PDF 举报
本文主要讨论的是在Android应用中如何拦截并获取嵌入的WebView内部POST请求参数的问题。当开发者需要在自家APP中监控嵌入的非自家控制的H5页面请求,而又不想让H5察觉时,通常会遇到获取POST请求参数的挑战。文章提供了两种实现方案来解决这个问题。
方案一:直接拦截所有请求
开发者最初的想法是设置一个自定义的`WebViewClient`,通过`shouldInterceptRequest`方法尝试访问`WebResourceRequest`中的URL,但这只能捕获GET请求,因为POST请求的参数通常被包含在请求体中,而不是URL中。这种方法对于POST请求是无效的,因为它无法解析请求体。
```java
webView.setWebViewClient(new WebViewClient() {
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
try {
URL url = new URL(request.getUrl());
// ...其他处理逻辑
} catch (MalformedURLException e) {
e.printStackTrace();
}
return super.shouldInterceptRequest(view, request);
}
});
```
方案二:注入JavaScript代码实现
面对GET请求的局限性,作者找到了另一个解决方案。他们建议通过在H5页面中注入一段JavaScript代码,利用XMLHttpRequest对象的异步特性,每次发送Ajax请求时触发Android原生代码。具体步骤如下:
1. 在H5页面中编写JavaScript函数,如`generateRandom`用于生成随机ID,确保请求ID的唯一性。
2. 注入JavaScript,例如在`<head>`或`<body>`标签内添加以下代码:
```html
<script>
function generateRandom() {
return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
}
// 保持请求异步,确保与open和send的同步性
let requestID = null;
function handleAjaxRequest() {
if (requestID !== null) {
// 发送POST请求时,将参数和请求ID传递给Android原生
const params = { /* H5请求参数 */ };
sendRequest(requestID, params);
}
}
function sendRequest(id, params) {
// ...实际的Ajax发送代码,这里省略
requestID = id;
// ...后续Ajax代码
}
</script>
```
然后,在H5代码中,每当发起一个异步的`open`和`send`请求时,`handleAjaxRequest`函数会被触发,从而能够访问到POST请求的参数,并将其传递给Android应用。
总结来说,这篇文章提供了一种间接的方式来解决在Android中拦截并获取WebView内部POST请求参数的问题,通过JavaScript代码与原生代码的交互实现了对POST请求参数的监控,同时保持了对H5的透明性。
2020-08-19 上传
2016-05-18 上传
点击了解资源详情
2020-08-19 上传
2020-08-30 上传
2018-12-18 上传
2021-05-17 上传
2016-06-07 上传
weixin_38516040
- 粉丝: 3
- 资源: 918
最新资源
- 新代数控API接口实现CNC数据采集技术解析
- Java版Window任务管理器的设计与实现
- 响应式网页模板及前端源码合集:HTML、CSS、JS与H5
- 可爱贪吃蛇动画特效的Canvas实现教程
- 微信小程序婚礼邀请函教程
- SOCR UCLA WebGis修改:整合世界银行数据
- BUPT计网课程设计:实现具有中继转发功能的DNS服务器
- C# Winform记事本工具开发教程与功能介绍
- 移动端自适应H5网页模板与前端源码包
- Logadm日志管理工具:创建与删除日志条目的详细指南
- 双日记微信小程序开源项目-百度地图集成
- ThreeJS天空盒素材集锦 35+ 优质效果
- 百度地图Java源码深度解析:GoogleDapper中文翻译与应用
- Linux系统调查工具:BashScripts脚本集合
- Kubernetes v1.20 完整二进制安装指南与脚本
- 百度地图开发java源码-KSYMediaPlayerKit_Android库更新与使用说明