android okhttp3带cookie请求

android okhttp3带cookie请求,第1张

Request经常都要携带Cookie,上面说过request创建时可以通过header设置参数,Cookie也是参数之一。就像下面这样:

然后可以从返回的response里得到新的Cookie,你可能得想办法把Cookie保存起来。

但是OkHttp可以不用我们管理Cookie,自动携带,保存和更新Cookie。

方法是在创建OkHttpClient设置管理Cookie的CookieJar

相关文章

1、 OkHttp3入门介绍:https://www.jianshu.com/p/af144d662bfd

2、 OkHttp3入门介绍之Cookie持久化:https://www.jianshu.com/p/23b35d403148

本章主要从以下几个方面介绍:

1、OkHttp3 Cookie内置管理机制介绍

2、基于本地存储的Cookie管理

3、基于内存存储的Cookie管理

4、总结

OkHttp提供了用于管理Cookie的接口 CookieJar ,看一下接口的内部结构:

从上面可以看出, CookieJar 接口提供了 saveFromResponse 、 loadForRequest 两个方法,还有一个内部类默认实现 NO_COOKIES 。

1) saveFromResponse 方法:当网络请求返回结果后,内部会解析Header并获取cookie相关信息,同时回调该方法,此处可以缓存或者持久化cookie,下面看一下调用源码:

2) loadForRequest 方法:当网络请求时,okhttp会通过该方法,获取对应cookie,下面看一下调用源码:

3)如果开发者在初始化 OkHtpClient 时没有自定义CookieJar,默认不会进行cookie *** 作,看一下 OkHttpClient 的构造器实现;

这里我仿照 android-async-http 的Cookie管理机制 PersistentCookieStore 进行改造;

实现逻辑

1、定义用于管理Cookie的接口 CookieStore

2、定义 CookieJarImpl 类实现 CookieJar 接口,然后用 CookieStore 去接管 saveFromResponse 、 loadForRequest 这两个方法;

3、定义 PersistentCookieStore 类实现 CookieStore 接口,用于管理Cookie;

4、将 PersistentCookieStore 对象设置到 OkHttpClient 中;

具体实现

1、定义 CookieStore 接口:

2、定义 CookieJarImpl 类实现 CookieJar 接口,然后用 CookieStore 去接管 saveFromResponse 、 loadForRequest 这两个方法:

3、定义 PersistentCookieStore 类实现 CookieStore 接口,用于管理Cookie;

:这里仿照 android-async-http 库里的 PersistentCookieStore 实现)

这里面用到了 SerializableCookie ,主要用于序列表cookie对象到对象流中:

4、将 PersistentCookieStore 对象设置到 OkHttpClient 中;

实现逻辑跟 PersistentCookieStore 类似,只是对于Cookie的存储放在了Map中。

今天的主要就是介绍了Cookie的管理,就是从 CookieJar 接口的两个方法入手,然后做了进一步的封装处理, PersistentCookieStore 和 MemoryCookieStore 这两个类的逻辑实现基本一致,喜欢动手的小伙伴完全可以进一步抽象一下。

httppost添加cookie的方法具体如下:

第一种

HashMap map = new HashMap()

map.put("cookie","p1u_id=4eb591e73554db0f4d3300cb656113abfb968ef6b0ee2b5de0a35caa5217c51faa028b453576b35c")

networkConnection.setHeaderList(map)

NetworkConnection.ConnectionResult result = networkConnection.execute()

第二种是用okhttp

OkHttpClient client = new OkHttpClient()

String returnData=null

com.squareup.okhttp.Request request = new com.squareup.okhttp.Request.Builder()

addHeader("cookie", "p1u_id=4eb591e73554db0f4d3300cb656113abfb968ef6b0ee2b5de0a35caa5217c51faa028b453576b35c")

url(url)

.build()

Response response = null

try {

response = client.newCall(request).execute()

returnData=response.body().string()

Log.i("ss", "url is " + url + "_______RETUNRN DATA IS " + returnData)

} catch (IOException e) {

e.printStackTrace()

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7897676.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存