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 Cookie存储Android InMemory和用于HttpURLConnection和OkHttp的持久性Cookie存储,具有扩展功能,可以轻松地在Android WebViews中同步Cookie。 为什么? HttpURLConnection和Ok Android Cookie都没有,...
在Android应用开发中,OkHttp和Retrofit是两个非常重要的组件。OkHttp作为一个高效的网络库,负责处理HTTP请求和响应,而Retrofit则是一个接口层的抽象,使得开发者可以通过简单的Java接口来调用网络API。然而,在...
通过OkHttp拦截器、自定义CookieJar有效完成客户端与H5端的Cookie同步管理 监听WebView的加载进度 滚动条的设置(隐藏或者显示,内侧显示还是外侧显示) 优化X5WebView的预加载问题(使用IntentService规避风险) ...
在Android开发中,网络编程是不可或缺的一部分,而OkHttp作为高效、易用的网络库,深受开发者喜爱。本文将深入探讨OkHttp中的一个重要特性——请求重试拦截器,以及如何利用这一特性来优化网络请求。 首先,理解...
本篇文章主要介绍了Android OkHttp实现全局过期token自动刷新示例,解决了在Android开发中常见的问题,即如何在请求某个接口时自动刷新token。 首先,我们需要了解什么是token和cookie。cookie是保存在本地终端的...
针对“Android版本更新OKhttp 适配7.0监听下载进度”这一主题,我们将深入探讨如何利用OKhttp库进行APK更新下载,并在Android 7.0(API级别24)及以上版本中监听下载进度以及处理权限配置问题。 首先,让我们了解...
在`enqueue()`方法中传入的`Callback`对象会处理服务器的响应: ```java public class MyCallback implements Callback { @Override public void onFailure(Call call, IOException e) { // 请求失败处理 } @...
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 包
OkHttp是一款高效、强大的网络库,由Square公司开发,被广泛应用于Android项目中。本文将深入探讨如何使用OkHttp以及如何进行二次封装,以适应项目的特定需求。 ### 1. OkHttp的基本使用 OkHttp的优势在于它的高...
在Android应用开发中,网络请求是必不可少的一部分,OkHttp是一个高效、易用的网络库,被广泛用于Android平台。本示例"Android开发 okhttp网络请求使用demo,包括上传文件方法封装"将帮助开发者理解如何利用OkHttp...
在Android开发中,网络编程是不可或缺的一部分,而OkHttp作为一款高效的HTTP客户端库,被广泛应用于Android应用中。本文将详细讲解如何利用OkHttp的请求拦截器(Interceptor)实现请求的拦截并打印日志到logcat,这...
1. **添加依赖**:在Android项目中,我们需要在build.gradle文件中添加OkHttp3的依赖: ```groovy dependencies { implementation 'com.squareup.okhttp3:okhttp:4.9.3' } ``` 2. **创建OkHttpClient实例**:...
但是,在此强烈推荐一下 DSBridge,它是一个使用非常简单并支持同步的跨平台 JavaScript Bridge,最关键的是,DSBridge 的 demo 中就有接收处理 Fly.js 转发的 HTTP 请求的示例,并且给出了 OkHttp 的实现,并且,...
在Android开发中,网络编程是不可或缺的一部分,而OkHttp3作为一个高效的HTTP客户端库,被广泛应用于数据交互。本文将深入探讨如何对Okhttp3进行二次封装,以实现更便捷、功能丰富的API,包括POST、GET、PATCH、PUT...
这样,OkHttp会在每次请求时自动处理Cookie,同时在请求完成后将新的Cookie保存到持久化存储中。 总结一下,通过在Eclipse上创建一个封装了OkHttp的Util类,可以简化网络请求的代码,提高开发效率。同时,配合...
OKHttp3是如今非常流行的Android网络请求框架,那么如何利用Android实现断点续传呢,今天写了个Demo尝试了一下,感觉还是有点意思 准备阶段 我们会用到OKHttp3来做网络请求,使用RxJava来实现线程的切换,并且开启Java8...
本篇文章将深入探讨如何基于OkHttp实现WebSocket框架,并关注其在Android上的应用。 首先,我们需要了解OkHttp对WebSocket的支持。OkHttp提供了一个WebSocket接口,通过创建WebSocketListener并重写其方法,我们...
在Android开发中,网络编程是不可或缺的一部分,而OkHttp是一个高效、易用的网络请求库。本篇文章将深入探讨如何对OkHttp进行封装,以便更方便地进行HTTP请求,并将返回的数据自动映射到指定的对象中,从而简化开发...