【问题标题】:WebView with Headers Connection Error带有标头连接错误的 WebView
【发布时间】:2011-03-29 21:08:19
【问题描述】:

我正在尝试打开一个站点的 Web 视图(在 Android 中),该站点需要标头中的令牌/Cookie 进行身份验证。

我尝试使用下面的代码打开页面

HashMap<String,String> headers = new HashMap<String,String>();
headers.put("Cookie","MyToken");
MyWebView.loadUrl("https://myURL.com",headers);

我正在使用以下值点击 onReceivedError 错误代码-6 *描述:与服务器的连接不成功。*

(PS:由于可以从 Intranet 访问此站点,因此使用模拟器我没有看到此错误页面加载正确。HttpPost 使用相同的令牌也可以正常工作)

【问题讨论】:

    标签: android http-headers webview


    【解决方案1】:

    这只是一篇关于将 cookie 添加到 Web 视图的快速帖子。如果你曾经尝试过按照大多数人所说的方式来做这件事,那么你就惨遭失败并找到了这篇文章。 :)

    它的工作方式是在 CookieManager 上设置 cookie,然后告诉 CookieSyncManager 进行同步。

    CookieManager.getInstance().setCookie(domain, value);
    CookieSyncManager.getInstance().sync();
    

    我从来没有按照描述的那样工作。有或没有等待线程赶上的异步任务。

    相反,我只是在所有 loadUrl 调用的标头中添加 cookie。

    Map<String, String> headers = new HashMap<String, String>();
    headers.put("Cookie", "cookieName=cookieValue;domain=domain.com;path=/;Expires=Thu, 2 Aug 2021 20:47:11 UTC;");
    webView.loadUrl("myurl.com", headers );
    

    警告:我只需要为请求加载适当的cookie,如果你想覆盖浏览器内部的嵌套调用,你需要覆盖shouldOverrideUrlLoading。

    webView.setWebViewClient(new WebViewClient() {
         @Override
         public boolean shouldOverrideUrlLoading(WebView view, String url) {
             view.loadUrl(url, headers);
             return false;
         }
    });
    

    如果您需要为所有请求(包括图片、js 等)注入 cookie,则需要覆盖 shouldInterceptRequest,

    【讨论】:

      【解决方案2】:

      那不是valid cookie header。试试:

      headers.put("Cookie", "foo=bar");
      

      【讨论】:

      • 您好,感谢您的输入,我实际上是按照您上面描述的格式添加 cookie。 String MyToken 是在添加 Session 标签后创建的,所以 MyToken 就像 "name=value"
      • 还有其他原因吗?我正在进一步调试问题,并怀疑设备上发生了超时,而不是模拟器?想知道我们是否可以为 WebView 客户端设置超时参数?
      猜你喜欢
      • 2012-02-28
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 2017-11-19
      相关资源
      最近更新 更多