最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【未解决】OkHttp中如何获取响应中的Cookie和管理Cookie

OkHttp crifan 1770浏览 0评论
折腾:
【未解决】用Java实现百度模拟登陆
期间,已经可以用OkHttp获取响应了。
但是需要去:获取response中的cookie,和管理cookie
okhttp cookie
OkHttp3简单的使用说明(Cookie管理) – 简书
OkHttp中自定义CookieJar及Cookie存储机制 – 简书
OkHttp与Cookie及Cookie的持久化 – chen19960724的博客 – CSDN博客
okhttp3带cookie请求 – shengfakun1234的专栏 – CSDN博客
Retrofit+OKHttp 教你怎么持久化管理 Cookie – Android – 掘金
okhttp3 – Automatic cookie handling with OkHttp 3 – Stack Overflow
android – How to retrieve cookie from response retrofit, okhttp? – Stack Overflow
java – Okhttp3 get cookie – Stack Overflow
别人建议用:PersistentCookieJar
franmontiel/PersistentCookieJar: A persistent CookieJar implementation for OkHttp 3 based on SharedPreferences.
去下载
Releases · franmontiel/PersistentCookieJar
结果下载得到
PersistentCookieJar-1.0.1.zip
解压却没有jar
download PersistentCookieJar jar
franmontiel / PersistentCookieJar Download
franmontiel/PersistentCookieJar – Libraries.io
Package PersistentCookieJar – tangsiyuan
PersistentCookieJar,在SharedPreferences上,基于 OkHttp 3的持久CookieJar实现,下载PersistentCookieJar的源码_GitHub_帮酷
下载不到PersistentCookieJar的jar
去IDEA的Maven中搜
结果搜出来的不是:
【已解决】Java用IntelliJ IDEA如何用gradle去安装第三方库PersistentCookieJar
然后继续调试,看看访问多个百度的url,之后是否会自动更新cookie
此处显示确保代码正常运行:
把百度首页的html保存后,点击用浏览器打开:
效果是:
http://localhost:63342/EmulateBaiduLogin/debug/baidu_com.html?_ijt=4rn63gldttgf945qhm7cmiped1
代码代码写了:
public class EmulateBaiduLogin {
    //    OkHttpClient client = new OkHttpClient();
    ClearableCookieJar cookieJar =
            new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(context));
    OkHttpClient client = new OkHttpClient.Builder()
            .addInterceptor(new LoggingInterceptor())
            .addInterceptor(new ResponseInterceptor())
            .cookieJar(cookieJar)
            .build();
但是却不知道如何写import这个PersistentCookieJar:
【无法解决】Java的IntelliJ IDEA中如何导入PersistentCookieJar这个库
换用别的,普通java支持的库
java cookie lib
okhttp3 cookie lib
okhttp3 – Automatic cookie handling with OkHttp 3 – Stack Overflow
去试试:
compile "com.squareup.okhttp3:okhttp-urlconnection:3.8.1"
OkHttp3实现Cookies管理及持久化 – OPEN 开发经验库
OkHttp3入门介绍之Cookie持久化 – 掘金
OkHttp3简单的使用说明(Cookie管理) – 简书
auto handle okhttp3 cookie
【未解决】Java给OkHttp加cookie出错:Cannot resolve symbol ‘setCookiePolicy’和Unknown class: ‘CookiePolicy.ACCEPT_ALL’
另外用:
    CookieJar cookieJar = new CookieJar();
    OkHttpClient client = new OkHttpClient.Builder()
            .addInterceptor(new LoggingInterceptor())
            .addInterceptor(new ResponseInterceptor())
            .cookieJar(cookieJar)
//            .cookieJar(new JavaNetCookieJar(cookieManager))
            .build();
结果:
‘CookieJar’ is abstract; cannot be instantiated
CookieManager  |  Android Developers
结果是Android的
java – AutoFitTextureView cannot resolve symbol in AndroidStudio – Stack Overflow
java – Cannot resolve symbol HttpUrl Android Studio – Stack Overflow
java Cannot resolve symbol  setCookiePolicy
[cookies] Automatic cookie handling with OkHttp 3 [okhttp3] | CODE Q&A Solved [English]
好像是需要自己去实现,比如:
    CookieJar cookieJar = new CookieJar() {
        private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>();

        @Override
        public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
            cookieStore.put(url.host(), cookies);
        }

        @Override
        public List<Cookie> loadForRequest(HttpUrl url) {
            List<Cookie> cookies = cookieStore.get(url.host());
            return cookies != null ? cookies : new ArrayList<Cookie>();
        }
    };
    OkHttpClient httpClient = new OkHttpClient.Builder()
            .cookieJar(cookieJar)
            .build();
好麻烦。
抽空参考:
Handle Cookies easily with Retrofit/OkHttp
【已解决】Java给OkHttp加cookie出错:Cannot resolve symbol setCookiePolicy和Unknown class CookiePolicy.ACCEPT_ALL
然后就去调试看看,多次访问不同页面,看看cookie是否有变化
然后确定java弄爬虫还是效率太低,还是去换Python弄吧:
【记录】Mac中用Python去模拟百度登陆

转载请注明:在路上 » 【未解决】OkHttp中如何获取响应中的Cookie和管理Cookie

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
80 queries in 0.205 seconds, using 22.14MB memory