安卓WebView:拦截重定向请求?

6
有没有办法在Android WebView中拦截重定向请求?shouldInterceptRequest(WebView,WebResourceRequest)似乎没有被调用!我想通过以下方式自动捕获所有Web视图请求中的令牌过期: 1.从服务器发出重定向而不是401 2.使用shouldOverrideUrlLoading()调用AppAuth,需要登录 3.在不需要登录的情况下,使用shouldInterceptRequest将其反弹到具有刷新令牌的原始URL
第2项工作正常,但第3项失败得非常惊人,因为shouldInterceptRequest似乎不会针对重定向进行调用,这似乎非常错误--特别是因为这并未记录在文档中,WebResourceRequest API会让人误以为可以检查请求是否为重定向。
我很乐意响应401而不是使用重定向--但我看不到任何一种方法可以在现场使用更新的令牌重试请求,除非请求恰好是顶级页面请求。
我想我可以尝试旧的“页面内”重定向而不是302,看看是否更好,但即使如此,那也是一个hack。
(请注意,这显然是一个不同的问题,而不是Android WebView,在应用程序中如何处理重定向而不是打开浏览器 - 因为我已经有一个Webview,并试图拦截和操作重定向请求。)

嘿!也许这可以帮到你 https://dev59.com/zG855IYBdhLWcg3w75Eu - Franklin Hirata
不,我需要让现有的 Web 视图处理请求的结果,包括非顶级请求,例如 <img> 标签等。但在某些情况下,我需要重新设计请求。然而,目前看来 WebViewClient 并不是可行的解决方案。 - Jess Holle
@JessHolle,你有解决办法吗?如果你能分享的话,那真是太有帮助了。 - Jaber Shabeek
1个回答

0

Kotlin拦截示例:

webView.webViewClient = object: WebViewClient() {
    override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
        if (url.startsWith("https://example.com")) {
            // ...
            return false
        }
        return super.shouldOverrideUrlLoading(view, url)
    }
}

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