Android WebView:拦截重定向请求?

Posted

技术标签:

【中文标题】Android WebView:拦截重定向请求?【英文标题】:Android WebView: Intercept redirect requests? 【发布时间】:2018-02-03 14:58:00 【问题描述】:

有没有办法在 android WebView 中拦截重定向请求? shouldInterceptRequest(WebView,WebResourceRequest) 似乎没有被调用!

我想通过以下方式自动捕获所有 Web 视图请求中的令牌过期:

    从服务器发出重定向而不是 401 在需要登录时使用 shouldOverrideUrlLoading() 调用 AppAuth 在不需要登录的情况下,使用 shouldInterceptRequest 通过刷新令牌返回到原始 URL

第 2 项工作正常,但第 3 项失败得惊人,因为似乎没有调用 shouldInterceptRequest 来进行重定向,这似乎确实是错误的——特别是因为这没有记录在案并且 WebResourceRequest API 会让人相信甚至可以检查请求是否为重定向。

我很乐意响应 401,而不是使用重定向 - 但我认为没有办法使用更新的令牌“原地”重试请求,除非该请求恰好是***页面请求。

我想我可以尝试旧的“页内”重定向而不是 302,看看效果是否更好,但即使这样做真的也是一种黑客攻击。

(请注意,这显然是与Android WebView, how to handle redirects in app instead of opening a browser 不同的问题——因为我已经有一个 web 视图并且正在尝试拦截和操作重定向请求。)

【问题讨论】:

嘿!也许它可以帮助你***.com/questions/4066438/… 不,我需要让现有的 Web 视图处理请求的结果,包括非***请求,例如对于 标签等。不过,如果我需要重新设计请求。看来这根本不是 WebViewClient 的可行方法。 @JessHolle 你有什么解决方案吗,如果你能分享一下,真的很有帮助。 【参考方案1】:

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)
    

【讨论】:

以上是关于Android WebView:拦截重定向请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Xamarin Forms 中的 webview 拦截“重定向 URL”

Android WebView 重定向问题

想要在 webview android 中完成 url 加载后将 webview 重定向到其他意图

Android Rotation 重定向到 webview 的根 URL

带有“ 307临时重定向”的Android VideoView播放URL

Android WebView 不加载自动重定向 url