OkHttp CookieJar saveFromResponse方法

时间:2017-08-31 09:56:01

标签: retrofit2 okhttp3 cookiejar

我创建了一个使用CookieJar的简单项目。现在我想了解saveFromResponse方法何时起作用。但我在日志中看到loadForRequest工作正常,但我没有看到saveFromResponse日志。为什么?在什么时候这个方法有效?如果我们使用cookie,我们可以只使用拦截方法吗?或者我们有使用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 个答案:

答案 0 :(得分:0)

我知道这有点晚了,但是我正为同样的问题而苦苦挣扎,然后我意识到saveFromResponse仅在新的cookie上被调用。这意味着loadForRequest中不会收到您在saveFromResponse上设置的所有cookie。

这是我可以推断的行为,但是我不确定是否应该这样做,因为这样一来,您就无法从远程服务器获取cookie值更新。

您是否经历过这样的行为,即仅在创建OkHttpClient之后才在第一个请求上收到cookie,而在其余请求上却没有收到?

请,有更多知识的人可以阐明吗?