zoukankan      html  css  js  c++  java
  • android webview带cookie访问url

    问题描述
    在原生和h5混合开发的时候会遇到这么一个问题,用webview加载某个url时,你只是app登录了账号,但是网页却没有,所有会禁止访问此url,webview就会显示白屏。
    所以要访问此url,需要带上cookie进行访问。这个cookie就是用app登录时所存储的cookie

    实现方法和一些环境
    网络请求方式
    HttpsUrlConnection
    这里既然用到了HttpsUrlConnection 说明我所加载的url是https协议
    所以webview加载的时候会白屏
    报错信息:

    这是由于证书和域名不匹配,我的调试环境在内网服务器上,而证书是绑定在公网的域名上的。
    所以需要webView跳过证书验证,

    跳过证书验证
    webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    Log.e("app_name",error.toString());
    handler.proceed();
    }
    });

    然后设置cookie
    cookie是在app使用HttpsUrlConnect发起登录请求时保存在本地的cookie

    app登录成功后保存cookie到本地
    SharedPreferences sharedPreferences = getSharedPreferences("login",MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    String cookieval = conn.getHeaderField("Set-Cookie");
    editor.putString("all_cookie",cookieval);

    是一个结构如下的值:

    SESSION=f19b09e9-69b2-4ab4-9daf-ea224523a092; Path=/; Secure; HttpOnly
    1
    写入cookie
    /**
    *@param cookie 上面获取到的存储在本地的cookie字符串
    *@param url 要加载的页面url
    */
    private void setCookie(String cookie,String url) {
    String StringCookie = cookie;
    CookieManager cookieManager = CookieManager.getInstance();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    cookieManager.removeSessionCookies(null);
    cookieManager.flush();
    } else {
    cookieManager.removeSessionCookie();
    CookieSyncManager.getInstance().sync();
    }
    cookieManager.setAcceptCookie(true);
    cookieManager.setCookie(url, StringCookie);
    }

    所有关键代码
    SharedPreferences sharedPreferences = getSharedPreferences("login",MODE_PRIVATE);
    String cookie = sharedPreferences.getString("session","");
    String all_cookie = sharedPreferences.getString("all_cookie","");
    Log.e("weibiao",all_cookie);
    webView = findViewById(R.id.other_account_service_webview);
    webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    Log.e("weibiao",error.toString());
    handler.proceed();
    }
    });
    initWebViewSettings();//webview的一些设置
    setCookie(all_cookie,url);//在loadurl之前调用此方法
    webView.loadUrl(url);

  • 相关阅读:
    windows系统下hosts文件的改写(为了测试nginx内网的证书代理,需要做域名解析)
    搭建jenkins
    Jsp传递参数的方法
    防止自己的网站被别人frame引用造成钓鱼
    Jsp连接Mysql数据库取数方法
    Win7下安装Mysql方法
    jsp建立错误页自动跳转
    jsp-forward跳转
    jvm栈和堆详解
    Gridpanel多种操作帮助文档
  • 原文地址:https://www.cnblogs.com/yelanggu/p/10870358.html
Copyright © 2011-2022 走看看