• 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);

  • 相关阅读:
    C#呓语
    引起超时的原因及表解锁的方法<转>
    如何使用数据库引擎优化顾问优化数据库 <转>
    缩短IIS应用池回收时间,减少IIS假死<转>
    Microsoft Silverlight 4 Tools for Visual Studio 2010中文版本
    系统统一验证(IHttpHandlerFactory)<转>
    解决CSS BUG的顺口溜<转>
    重建索引提高SQL Server性能<转>
    .NET调用osql.exe执行sql脚本创建表和存储过程<转>
    SQL SERVER性能优化综述<转>
  • 原文地址:https://www.cnblogs.com/yelanggu/p/10870358.html
Copyright © 2020-2023  润新知