【问题标题】:Intercept *all* requests from Android WebView拦截来自 Android WebView 的*所有*请求
【发布时间】:2014-10-05 13:00:12
【问题描述】:

标题说明了一切。我想知道WebView 要求的一切。一些奇怪的限制,比如不知道 XHR POST 是不可接受的。换句话说,类似 iOS 的东西在 NSURLProtocol 中。那是应用程序范围的钩子。我不需要这种级别的控制,WebView-instance-specific 钩子就足够了。现在,我知道 Android 上没有类似的东西。我知道shouldOverrideUrlLoadingshouldInterceptRequest,但它基本上无法使用。我需要了解requests(方法、HTTP 版本、标头,你知道),而不仅仅是 URL 字符串。此外,拦截是尴尬的同步。如果shouldInterceptRequest 呼叫因为我需要向其他服务器询问相关资源而被阻止,会发生什么情况?在我看来,它只是为本地资源缓存而设计的。

另一方面,我愿意为这个问题抛任何东西。某种本机库,挂钩到低级内部?借助现有项目(pwnallmogoweb)扩展 Chromium 接口?反映到现有的 webkit 类私有?特定于应用程序的代理?任何见解表示赞赏。我已经阅读了两打现有的 SO 问题。他们要么都建议部分破解(例如使用 JavaScript 解决 XHR POST 缺陷),要么经常完全没有响应。

【问题讨论】:

  • 长期来看,你可以看看Mozilla's GeckoView 是否有更多的钩子来满足你的需求。您列出的唯一一个我非常信任的解决方案就是代理。
  • @CommonsWare:就 Mark Finkle 而言,GeckoView 似乎是一匹死马。它似乎在大约一年前停滞不前。我的列表并不权威,而是 Android 高级大脑的狂想风暴。那么应该可以使用特定于应用程序的代理吗?更多信息的谷歌拼写是什么? :)
  • 我搜索了android webview proxy。请注意,这不受支持,但它可能比您列表中的其他选项更稳定。

标签: android webview chromium nsurlprotocol


【解决方案1】:

尝试检查:

https://github.com/ac-pm/Inspeckage

它需要 Xposed 和 root 访问权限才能工作。我已经能够看到来自应用程序的 WebView 请求。我正在研究如何使用 Python 的 requests 模块重新创建它们。

希望对您有所帮助。

【讨论】:

  • 所需的功能必须是 Playstore 可发布的,因此不能选择生根。不过还是感谢您的反馈。
【解决方案2】:

如果我理解你的目标 - 试试:

WebView.setWebContentsDebuggingEnabled(true);

打开 Chrome 并转到网址 chrome://inspect/#devices

详情:

https://developers.google.com/web/tools/chrome-devtools/remote-debugging

https://developers.google.com/web/tools/chrome-devtools/remote-debugging/webviews

【讨论】:

  • 虽然这在理论上可以回答问题,it would be preferable 在这里包含答案的基本部分,并提供链接以供参考。
  • 无论如何我在寻找程序控制,而不是 Chrome 调试。
猜你喜欢
  • 2021-08-07
  • 2017-02-09
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
  • 2020-08-12
  • 2014-10-29
相关资源
最近更新 更多