android okhttp使用cookie请求_暴走邻家的博客-CSDN博客
使用Okhttp持久化Cookie - 代码先锋网
今天,简单讲讲Android的http使用cookie请求。
现在,做一个功能,出现一个奇怪现象,就是老是登陆成功后,发送请求获取消息,老是提示我没有登陆。我自己都不知道是什么原因,这个也是我对网络通信这块不了解。请教了其他大神后,终于知道是请求没有加cookie的问题。这里记录一下。
Request经常都要携带Cookie,上面说过request创建时可以通过header设置参数,Cookie也是参数之一。就像下面这样:
Request request = new Request.Builder()
.url(url)
.header("Cookie", "xxx")
.build();
然后可以从返回的response里得到新的Cookie,你可能得想办法把Cookie保存起来。 但是OkHttp可以不用我们管理Cookie,自动携带,保存和更新Cookie。 方法是在创建OkHttpClient设置管理Cookie的CookieJar,只需要我们复写两个方法即可:
private final HashMap cookieStore = new HashMap();
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.cookieJar(new CookieJar() {
@Override
public void saveFromResponse(HttpUrl httpUrl, List list) {
cookieStore.put(httpUrl.host(), list);
}
@Override
public List loadForRequest(HttpUrl httpUrl) {
List cookies = cookieStore.get(httpUrl.host());
return cookies != null ? cookies : new ArrayList();
}
})
.build();
这样就可以解决cookie的问题了,很感谢写这篇文章的人。参考文章:okhttp3带cookie请求 - 安卓笔记侠 - 博客园
二、Cookie应用场景举例二项目中都是需要登录再去获取对应的接口的数据,这里针对于登录后保持cookie然后访问剩余接口信息的功能实现:
OkHttpClient httpClient = new OkHttpClient.Builder()
.cookieJar(new CookieJar() {
//自定义
private final HashMap cookieStore = new HashMap();
//复写
@Override
public void saveFromResponse(HttpUrl url, List cookies) {
cookieStore.put(url,cookies);
}
//复写
@Override
public List loadForRequest(HttpUrl url) {
List cookies = cookieStore.get(url);
return cookies != null ? cookies : new ArrayList();
}
}).build();
所谓的Cookie我们可以简单的理解为存储的为键值对:key = value,我们建立一个HashMap作为存储url为key,对应的url服务器返回给我们的cookie数组
一个cookie就是一对值,服务器可能返回给我们的多个cookie键值对,例如:
name = Tom 一个cookie
age = 13 另外一个cookie
saveFromResponse(HttpUrl url,List cookies),用来获取服务器端返回的Response中返回的Cookies(可能是很多个),存储在cookieStore这个变量中
loadForRequest(HttpUrl url),用来根据url这个key来从cookieStore中获取去对应的所有的Cookie
Cookie作为持久化的机制首先,Cookie是存储在客户端也可认为是浏览器端,Session存储在服务器端,当我们登录淘宝后是不是就可以访问淘宝的所有的网站了,而不是访问一个页面就要登录一次吧,这里就是Session和Cookie在起作用
浏览器 - - - - - - > 服务器(服务器为用户创建一个Session)
浏览器
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?