美文网首页
android中将原生请求的接口url的cookie同步到web

android中将原生请求的接口url的cookie同步到web

作者: 背锅TV丶伴奏大师 | 来源:发表于2018-06-21 10:24 被阅读29次

    在我们用webView.loadUrl(url);时一般会遇到判断是否登录的情况,但我们登录请求使用了android原生,那怎么在web网页中也同步登录状态呢,下面我来解释一番。

    首先我们http请求时,会有一个请求头(利用抓包工具可以看到),请求头里面会有一个cookie,cookie的值是根据主域名domain而来的,他有一个时效,一般后台默认设置30分钟。所以我们需要拿到原生请求的url的cookie同步给webView.loadUrl(url);的url。下面贴代码。

        syncCookie();//先调用同步cookie
        webView.loadUrl(url);//再调此步骤
        //向webview同步传递cookie
        private synchronized void syncCookie(){
            CookieSyncManager.createInstance(webView.getContext());
            CookieManager cookieManager = CookieManager.getInstance();
            cookieManager.setAcceptCookie(true);
            cookieManager.removeAllCookie();
            CookieStore cookieStore = OkGo.getInstance().getCookieJar().getCookieStore();
            HttpUrl httpUrl = HttpUrl.parse(ApiConstant.getUserInfo);
            List<Cookie> cookieList = cookieStore.getCookie(httpUrl);
            for (Cookie cookie:cookieList){
                String[] cookies=cookie.toString().split(";");
                if(cookies!=null){
                    for(String c:cookies){
                        //给webview加载的url的domain设置原生请求接口的cookie。
                        cookieManager.setCookie(cookie.domain(), c);
                    }
                }
            }
            CookieSyncManager.getInstance().sync();
        }
        //清除Cookie
        private void removeCookie(String url) {
            HttpUrl httpUrl = HttpUrl.parse(url);
            CookieStore cookieStore = OkGo.getInstance().getCookieJar().getCookieStore();
            cookieStore.removeCookie(httpUrl);
        }
    

    注意:我这里使用了okgo的网络请求框架,注意要在Application的onCreate里面配置okgo管理cookie才有效。

    相关文章

      网友评论

          本文标题:android中将原生请求的接口url的cookie同步到web

          本文链接:https://www.haomeiwen.com/subject/ewqqyftx.html