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

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

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

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

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

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

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

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

【问题讨论】:

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

标签: android redirect webview webviewclient


【解决方案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)
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 2012-01-06
    • 2015-12-06
    • 2019-02-18
    相关资源
    最近更新 更多