如何使用 OkHttp 在 Android 上实现 cookie 处理? [英] How to implement cookie handling on Android using OkHttp?

查看:52
本文介绍了如何使用 OkHttp 在 Android 上实现 cookie 处理?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

通过 Square https://github.com/square/okhttp 使用 OkHttp,我该如何:

Using OkHttp by Square https://github.com/square/okhttp, how can I:

  1. 检索从服务器返回的 cookie
  2. 为即将到来的请求存储 cookie
  3. 在后续请求中使用存储的 cookie
  4. 更新后续请求返回的cookie

理想情况下,每次请求都会自动存储、重新发送和更新 cookie.

Ideally the cookie would be stored, resent and updated automatically with every request.

推荐答案

对于OkHttp3,一个简单的accept-all、非持久CookieJar实现可以如下:

For OkHttp3, a simple accept-all, non-persistent CookieJar implementation can be as follows:

OkHttpClient client = new OkHttpClient.Builder()
    .cookieJar(new CookieJar() {
        private final HashMap<HttpUrl, List<Cookie>> cookieStore = new HashMap<>();

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

        @Override
        public List<Cookie> loadForRequest(HttpUrl url) {
            List<Cookie> cookies = cookieStore.get(url);
            return cookies != null ? cookies : new ArrayList<Cookie>();
        }
    })
    .build();

或者,如果您更喜欢使用 java.net.CookieManager,请在您的项目中包含 okhttp-urlconnection,其中包含一个包装器 JavaNetCookieJar委托给 java.net.CookieHandler 的类:

Or if you prefer to use java.net.CookieManager, include okhttp-urlconnection in your project, which contains JavaNetCookieJar, a wrapper class that delegates to java.net.CookieHandler:

dependencies {
    compile "com.squareup.okhttp3:okhttp:3.0.0"
    compile "com.squareup.okhttp3:okhttp-urlconnection:3.0.0"
}

<小时>

CookieManager cookieManager = new CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
OkHttpClient client = new OkHttpClient.Builder()
    .cookieJar(new JavaNetCookieJar(cookieManager))
    .build();

这篇关于如何使用 OkHttp 在 Android 上实现 cookie 处理?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆