`
ch_kexin
  • 浏览: 908942 次
  • 性别: Icon_minigender_2
  • 来自: 青岛
社区版块
存档分类
最新评论

Android中OKHttp保存Cookie并传入WebView

 
阅读更多

Cookie是服务器为客户端分配的一个键值对的表,和session不同的是cookie存储在客户端。服务器通过Response.addCookie()为客户端添加Cookie数据,再从Request.getCookie()中获取数据。

       在Android开发中,有时我们需要调用http的接口登录帐号,然后使用cookie作为登录标记来进行网页浏览。此时就需要从http请求中取到cookie数据并保存起来,在使用webView进行页面访问时再将cookie数据设置到webview上。本文以OKHttp为讨论对象,下面是从OKHttp中取到Cookie数据的过程:

      一.定义cookie接收监听器

 

   /**
     * This Interceptor add all received Cookies to the app DefaultPreferences.
     * Your implementation on how to save the Cookies on the Preferences MAY VARY.
     * <p>
     * Created by tsuharesu on 4/1/15.
     */
    public class ReceivedCookiesInterceptor implements Interceptor {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Response originalResponse = chain.proceed(chain.request());
            List<String> cookieList =  originalResponse.headers("Set-Cookie");
            if(cookieList != null) {
                for(String s:cookieList) {//Cookie的格式为:cookieName=cookieValue;path=xxx
                    //保存你需要的cookie数据
                }
            }
            return originalResponse;
        }
    }

 

 

      二.使用OKHttp发送简单Get请求

   Request request = new Request.Builder().url("Your URL").build();
   OkHttpClient client = new OkHttpClient();
   client.interceptors().add(new ReceivedCookiesInterceptor()); //你定义的cookie接收监听器
   Response response = client.newCall(request).execute();

     三.初始化webview设置

    /**
     * init WebView Settings
     * */
    private void initWebViewSettings(){
        // 设置可以访问文件
        getSettings().setAllowFileAccess(true);
        //如果访问的页面中有Javascript,则webview必须设置支持Javascript
        getSettings().setJavaScriptEnabled(true);
        getSettings().setAllowFileAccess(true);
        getSettings().setAppCacheEnabled(true);
        getSettings().setDomStorageEnabled(true);
        getSettings().setDatabaseEnabled(true);
    }

     四.将cookie设置到webview中去

    public void syncCookie(Context context, String url){
        try{
            CookieSyncManager.createInstance(context);
            CookieManager cookieManager = CookieManager.getInstance();
            cookieManager.setAcceptCookie(true);
            cookieManager.removeSessionCookie();// 移除
            cookieManager.removeAllCookie();
            String oldCookie = cookieManager.getCookie(url);

            URL aURL = new URL(url);

            StringBuilder sbCookie = new StringBuilder();
            sbCookie.append(String.format(CookieName + "=%s","Your saved Cookie Value."));
            //webview在使用cookie前会前判断保存cookie的domain和当前要请求的domain是否相同,相同才会发送cookie
            sbCookie.append(String.format(";domain=%s",aURL.getHost())); //注意,是getHost(),不是getAuthority(),
            sbCookie.append(String.format(";path=%s","/"));

            String cookieValue = sbCookie.toString();
            cookieManager.setCookie(url, cookieValue);
            CookieSyncManager.getInstance().sync();

            String newCookie = cookieManager.getCookie(url);
        }catch(Exception e){
        }
    }

 

      注意,在loadUrl()之前,设置cookie。

分享到:
评论

相关推荐

    Android——okhttp的封装

    Android——okhttp的封装,Android——okhttp的封装,Android——okhttp的封装,Android——okhttp的封装,Android——okhttp的封装

    Android InMemory和HttpURLConnection和OkHttp的持久性Cookie存储,具有扩展功能,可轻松同步Android WebViews中的cookie。-Android开发

    Android Cookie存储Android InMemory和用于HttpURLConnection和OkHttp的持久性Cookie存储,具有扩展功能,可以轻松地在Android WebViews中同步Cookie。 为什么? HttpURLConnection和Ok Android Cookie都没有,...

    Android-okhttp-json-mock帮助你为Okhttp和Retrofit模拟json格式的数据

    在Android应用开发中,OkHttp和Retrofit是两个非常重要的组件。OkHttp作为一个高效的网络库,负责处理HTTP请求和响应,而Retrofit则是一个接口层的抽象,使得开发者可以通过简单的Java接口来调用网络API。然而,在...

    Android代码-Android-X5WebView基本封装

    通过OkHttp拦截器、自定义CookieJar有效完成客户端与H5端的Cookie同步管理 监听WebView的加载进度 滚动条的设置(隐藏或者显示,内侧显示还是外侧显示) 优化X5WebView的预加载问题(使用IntentService规避风险)   ...

    Android-OkHttp的请求重试拦截器

    在Android开发中,网络编程是不可或缺的一部分,而OkHttp作为高效、易用的网络库,深受开发者喜爱。本文将深入探讨OkHttp中的一个重要特性——请求重试拦截器,以及如何利用这一特性来优化网络请求。 首先,理解...

    Android OkHttp实现全局过期token自动刷新示例

    本篇文章主要介绍了Android OkHttp实现全局过期token自动刷新示例,解决了在Android开发中常见的问题,即如何在请求某个接口时自动刷新token。 首先,我们需要了解什么是token和cookie。cookie是保存在本地终端的...

    Android版本更新 OKhttp 适配7.0监听下载进度

    针对“Android版本更新OKhttp 适配7.0监听下载进度”这一主题,我们将深入探讨如何利用OKhttp库进行APK更新下载,并在Android 7.0(API级别24)及以上版本中监听下载进度以及处理权限配置问题。 首先,让我们了解...

    android 的OkHttp3网络的POST和GET请求

    在`enqueue()`方法中传入的`Callback`对象会处理服务器的响应: ```java public class MyCallback implements Callback { @Override public void onFailure(Call call, IOException e) { // 请求失败处理 } @...

    Android-OkHttp3.0网络工具类

    OkHttp3.0是一个高效、易用的网络通信库,由Square公司开发,广泛应用于Android项目中。相较于旧版本,OkHttp3带来了许多性能优化和功能改进,使得它成为Android开发者首选的网络请求库之一。 1. **OkHttp简介** -...

    Android okHttp Jar 包

    Android okHttp Jar 包;Android okHttp Jar 包;Android okHttp Jar 包;Android okHttp Jar 包;Android okHttp Jar 包;Android okHttp Jar 包

    Android-OkHttp的使用以及二次封装

    OkHttp是一款高效、强大的网络库,由Square公司开发,被广泛应用于Android项目中。本文将深入探讨如何使用OkHttp以及如何进行二次封装,以适应项目的特定需求。 ### 1. OkHttp的基本使用 OkHttp的优势在于它的高...

    Android开发 okhttp网络请求使用demo,包括上传文件方法封装

    在Android应用开发中,网络请求是必不可少的一部分,OkHttp是一个高效、易用的网络库,被广泛用于Android平台。本示例"Android开发 okhttp网络请求使用demo,包括上传文件方法封装"将帮助开发者理解如何利用OkHttp...

    Android-OkHttp的请求拦截器实现请求拦截打印日志到logcat

    在Android开发中,网络编程是不可或缺的一部分,而OkHttp作为一款高效的HTTP客户端库,被广泛应用于Android应用中。本文将详细讲解如何利用OkHttp的请求拦截器(Interceptor)实现请求的拦截并打印日志到logcat,这...

    Android实战——okhttp3的使用和封装

    1. **添加依赖**:在Android项目中,我们需要在build.gradle文件中添加OkHttp3的依赖: ```groovy dependencies { implementation 'com.squareup.okhttp3:okhttp:4.9.3' } ``` 2. **创建OkHttpClient实例**:...

    实例详解Android Webview拦截ajax请求

    但是,在此强烈推荐一下 DSBridge,它是一个使用非常简单并支持同步的跨平台 JavaScript Bridge,最关键的是,DSBridge 的 demo 中就有接收处理 Fly.js 转发的 HTTP 请求的示例,并且给出了 OkHttp 的实现,并且,...

    Android-对Okhttp3进行二次封装

    在Android开发中,网络编程是不可或缺的一部分,而OkHttp3作为一个高效的HTTP客户端库,被广泛应用于数据交互。本文将深入探讨如何对Okhttp3进行二次封装,以实现更便捷、功能丰富的API,包括POST、GET、PATCH、PUT...

    okhttp请求简单封装和cookie管理

    这样,OkHttp会在每次请求时自动处理Cookie,同时在请求完成后将新的Cookie保存到持久化存储中。 总结一下,通过在Eclipse上创建一个封装了OkHttp的Util类,可以简化网络请求的代码,提高开发效率。同时,配合...

    详解Android使用OKHttp3实现下载(断点续传、显示进度)

    OKHttp3是如今非常流行的Android网络请求框架,那么如何利用Android实现断点续传呢,今天写了个Demo尝试了一下,感觉还是有点意思 准备阶段 我们会用到OKHttp3来做网络请求,使用RxJava来实现线程的切换,并且开启Java8...

    Android之基于OkHttp的websocket框架

    本篇文章将深入探讨如何基于OkHttp实现WebSocket框架,并关注其在Android上的应用。 首先,我们需要了解OkHttp对WebSocket的支持。OkHttp提供了一个WebSocket接口,通过创建WebSocketListener并重写其方法,我们...

    Android-OkHttp封装

    在Android开发中,网络编程是不可或缺的一部分,而OkHttp是一个高效、易用的网络请求库。本篇文章将深入探讨如何对OkHttp进行封装,以便更方便地进行HTTP请求,并将返回的数据自动映射到指定的对象中,从而简化开发...

Global site tag (gtag.js) - Google Analytics