OkHttp CookieJar saveFromResponse method

1.4k views Asked by At

I created a simple project which using CookieJar. Now I am trying to understand when saveFromResponse method works. But I see in my logs that loadForRequest works fine, but I doesn't see saveFromResponse logs. Why? At what time of process this method works? Can we use only intercept method if we works with cookies or may be we have a special situation for using CookieJar?

 OkHttpClient client = new OkHttpClient.Builder()
              .addInterceptor(new ReceivedCookiesInterceptor())
              .cookieJar(new CookieJar() {
                 private final HashMap<HttpUrl, List<Cookie>> cookieStore = new HashMap<>();
                        @Override
                        public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
                                    Log.d(TAG,"saveFromResponse");
                                    cookieStore.put(url, cookies);
                        }
                        @Override
                        public List<Cookie> loadForRequest(HttpUrl url) {
                                    Log.d(TAG,"loadForRequest");
                                    List<Cookie> cookies = cookieStore.get(url);
                                    return cookies != null ? cookies : new ArrayList<Cookie>();
                                        }
                                    })
                                    .build();

                            Request request = new Request.Builder()
                                    .url("http://www.publicobject.com/helloworld.txt")
                                    .build();

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

                            response.body().close();
1

There are 1 answers

0
gmanjon On

I know it's a bit late, but I was struggling with the exact same issue and then I realised that saveFromResponse is only called on new cookies. This means that all the cookies you set on loadForRequest are not received in saveFromResponse.

That's the behaviour I could infer, but I'm not sure if it is the one that it should be, as this way you can't get cookie value updates from remote server.

Did you experienced the behaviour that only on the first request after OkHttpClient creation the cookies are received and not on the rest of the requests?

Please, someone with more knowledge that can shed some light?