【发布时间】:2012-01-20 00:59:13
【问题描述】:
我一直在研究、研究和研究这个,直到我变得灰白秃顶。 对于需要通过 api 级别 8+ 上的 https 连接进行 http 基本身份验证的站点,我到底如何获得 webview 工作
我有以下代码
String email = Util.getEmail(this);
String pwd = Util.getPassword(this);
webview.getSettings().setJavaScriptEnabled(true);
webview.setHttpAuthUsernamePassword(Config.SERVER_BASE_URL, "Application", email, pwd);
// webview.setWebViewClient(new MobileWebViewClient(this));
webview.loadUrl(url);
如您所见,我确实有一个 Web 视图客户端(现已注释掉),它覆盖了如下所示的 onReceivedHttpAuthRequest 方法
@Override
public void onReceivedHttpAuthRequest (WebView view, HttpAuthHandler handler, String host, String realm){
String email = Util.getEmail(wvContext);
String pwd = Util.getPassword(wvContext);
if(!pwd.equalsIgnoreCase("-1") && !pwd.equalsIgnoreCase("-1")){
handler.proceed(email, pwd);
}
}
这在没有 webview.setHttpAuthUsernamePassword 的情况下使用并且工作正常,除了这意味着向网站发出 2 个请求 - 第一个获得 401,然后客户端使用授权内容这对于少量网站来说很好流量,但流量减半(目前平均每分钟 49 个请求)是现在的游戏名称!
我读到我可以通过使用预先提供凭据
webview.setHttpAuthUsernamePassword(Config.SERVER_BASE_URL, "Application", email, pwd);
但这只会导致 Http Basic: Access denied 错误 服务器基本 url 常量是站点的域名,即 https://example.com(没有页面)实际 url 是 https://example.com/some_pages。 无论我使用完整的 url 还是域,都没有区别。我已经检查了领域并且我有正确的并且我只使用了只提供电子邮件和密码的空字符串。 这可能与该网站使用 https 的事实有关吗?我的代码在没有 https 的情况下在我的开发盒上似乎可以正常工作,但这可能是一个红鲱鱼。!
似乎满足我的要求的唯一堆栈溢出问题没有得到接受的答案,而且我看不到文档的帮助。
我现在因为撞到砖墙上而在我的头上留下了这么大的凹痕,我正在考虑买一顶方帽。
如果有人能给我解决这个问题的方法,我将永远欠你的债! 我什至可以通过电子邮件向您发送 KitKat
【问题讨论】:
-
我认为this question and its accepted answer 不能解决您的问题?
-
@aaamos,它可以很好地解决我的问题,但我如何将它应用到 WebView?
-
您是否尝试过使用 httppost 下载网页,然后将其提供给 webview?
-
你不能只做email:password@example.com/some_page并动态构造url吗? (尽管您可能必须对电子邮件进行编码)...这可能是潜在的安全问题,但您可以尝试一下。
-
为什么要测试 !pwd.equalsIgnoreCase("-1") 两次?