您当前的位置: 首页 >  http
  • 1浏览

    0关注

    674博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

OKHTTP:Cookie使用场景

沙漠一只雕得儿得儿 发布时间:2022-08-02 16:05:01 ,浏览量:1

一、Cookie应用场景举例一

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)

浏览器             
关注
打赏
1657159701
查看更多评论
0.0382s