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”
想要在 webview android 中完成 url 加载后将 webview 重定向到其他意图
Android Rotation 重定向到 webview 的根 URL