拦截 Android WebView 的 *所有* 请求

3
标题已经说得很清楚了。我想了解关于WebView所需的所有内容。一些奇怪的限制,比如不知道XHR POST是不可接受的。换句话说,就像iOS在NSURLProtocol中拥有的那样。那个是应用程序范围的钩子。我不需要如此严格的控制,只需要WebView-实例特定的钩子就足够了。现在,我知道Android没有这样的东西。我知道shouldOverrideUrlLoadingshouldInterceptRequest,但它们大多无法使用。我需要知道请求(方法、HTTP版本、标题等)而不仅仅是URL字符串。此外,拦截方式非常笨拙同步。如果shouldInterceptRequest调用被阻止,因为我需要为相关资源询问不同的服务器会发生什么?对我来说,它似乎只是为本地资源缓存而设计的。
另一方面,我愿意尝试任何东西来解决问题。一些本地库,钩入低级别内部?扩展Chromium接口并借助现有项目(pwnallmogoweb)?反射到现有webkit类私有?应用程序特定代理?任何见解都会受到赞赏。我已经阅读了二十多个现有的SO问题。它们都建议使用部分黑客方法(例如通过JavaScript解决XHR POST缺陷)或者完全没有回应,往往如此。

从长远来看,您可以查看Mozilla的GeckoView,看看它是否有更多钩子可供使用。在您列出的解决方案中,我只会对代理抱有很大信心。 - CommonsWare
@CommonsWare: 尽管我十分尊重Mark Finkle,但GeckoView似乎已经停滞不前了。它好像在一年前就陷入了僵局。我的清单不是权威性的,而只是一个针对Android高级开发者的想法风暴。那么,是否可能有一种应用程序特定代理?Google对于更多信息的拼写是什么? :) - Pavel Zdenek
我搜索了“android webview代理”。请注意,虽然这不受支持,但它很可能比您列表中的其他选项更稳定。 - CommonsWare
2个回答

1
尝试使用 Inspeckage:

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

它需要Xposed和root权限才能运行。我已经能够看到应用程序发出的WebView请求。我正在找出如何使用Python的requests模块重新创建它们。
希望这有所帮助。

所需功能必须能够发布到Playstore,因此无法进行Root。但无论如何,感谢您的反馈。 - Pavel Zdenek

0

虽然这理论上回答了问题,但最好在此处包含答案的基本部分,并提供参考链接。 - Adrian Mole
无论如何,我正在寻找编程控制,而不是Chrome调试。 - Pavel Zdenek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接