файлы Как реализовать обработку файлов cookie на Android с помощью OkHttp?




как посмотреть куки на андроиде (3)

Используя OkHttp by Square https://github.com/square/okhttp , как я могу:

  1. Получить файл cookie, возвращенный с сервера
  2. Храните файл cookie для предстоящих запросов.
  3. Использовать сохраненный файл cookie в последующих запросах
  4. Обновить файл cookie, возвращенный последующим запросом

В идеале, cookie будет храниться, обновляться и обновляться автоматически с каждым запросом.


Мне нужно было разделить Cookie Jar по умолчанию (CookieManager.getInstance ()), так что это, похоже, работает нормально для меня.

return new CookieJar() {

        @Override
        public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
            CookieManager cookieManager = CookieManager.getInstance();

            for (Cookie cookie : cookies) {
                cookieManager.setCookie(url.toString(), cookie.toString());
            }
        }

        @Override
        public List<Cookie> loadForRequest(HttpUrl url) {
            CookieManager cookieManager = CookieManager.getInstance();
            List<Cookie> cookies = new ArrayList<>();
            if (cookieManager.getCookie(url.toString()) != null) {
                String[] splitCookies = cookieManager.getCookie(url.toString()).split("[,;]");
                for (int i=0; i<splitCookies.length; i++) {
                    cookies.add(Cookie.parse(url, splitCookies[i].trim()));
                }
            }
            return cookies;
        }
    };

Для OkHttp3 простая реализация CookieJar -all, непостоянная реализация CookieJar может быть следующей:

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 :

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();

Pre OkHttp 3 , вы можете передать CookieHandler в экземпляр OkHttpClient. Вы можете использовать реализацию CookieManager с java.net, или вы можете реализовать свои собственные, если хотите. Выберите политику, которая наилучшим образом подходит для ваших нужд.

OkHttpClient client = new OkHttpClient();
CookieManager cookieManager = new CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
client.setCookieHandler(cookieManager);

OkHttp сохраняет файлы cookie, полученные от ответов, в CookieHandler и считывает их при отправке запросов. Он будет делать это для соответствия URI запроса / ответа.





okhttp