webview 有什么好的替换品吗,正在做一个 app,需要捕获所有请求并处理

2016-05-05 13:12:51 +08:00
 pubby

需求比较特殊,要捕获所有请求,转到特殊代理通道再返回结果给页面

api 21 之后用这个截获所有请求

public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request)

对 GET 请求都没问题,但是 POST 之类的请求,只能从 request 上得到 method,url,headers 之类的数据,无法获取请求数据(post data)

网上查了一下,这个 issue 提了有两年了官方还没加上这个功能

10689 次点击
所在节点    Android
11 条回复
MntCw
2016-05-05 13:33:54 +08:00
我之前也遇到这个问题, Ajax 可以 post 过去。也想知道有没有更好的解决方法
pubby
2016-05-05 13:38:42 +08:00
@MntCw 嗯,是可以用一些其他手段解决一部分,比如注入 js 拦截一些接口,转到 app 内部处理。
就是不太通用
Gonster
2016-05-05 13:44:58 +08:00
插个题外话,手机好多 APP 用第三方身份提供商通过 OAuth2.0 做登录的,手机应用登录的时候用 webview 打开提供商的登录页面, webview 的请求内容可以被手机应用拦截,那用 OAuth2.0 的意义呢,密码不是会被手机应用获取到吗。
wadahana
2016-05-05 14:21:38 +08:00
1. webview 可以设置代理。
2. elf hook 某几个动态库的 connect 函数.
pubby
2016-05-05 14:37:58 +08:00
@wadahana
1 可以单独 webview 设代理? app 其他功能的网络还是要走正常通道的
2 貌似得 root 吧
faywong8888
2016-05-05 14:38:44 +08:00
与楼上相同,
给 webview 设置代理是一条可行的道路。
wadahana
2016-05-05 14:56:05 +08:00
看版本,>=14 < 19 可针对 webview , 其他都是全局。
你把全部请求拿到本地 http proxy 再做一次过滤。
wadahana
2016-05-05 15:30:39 +08:00
最好的替代品就是自己编个 webkit......
TonyYOYO
2016-05-05 17:47:07 +08:00
@wadahana 我们 iOS 这边是这样做的,
pubby
2016-05-05 18:14:57 +08:00
@TonyYOYO 自己修改个 webkit 用?
TonyYOYO
2016-05-08 15:55:15 +08:00
@pubby 不是啊,就是通过 proxy 做过滤

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/276493

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX