2

我创建了一个使用 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();
4

1 回答 1

2

我知道这有点晚了,但我一直在努力解决完全相同的问题,然后我意识到saveFromResponse这只需要新的 cookie。这意味着您设置的所有 cookieloadForRequest都不会在saveFromResponse.

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

您是否遇到过仅在OkHttpClient创建后的第一个请求时才收到 cookie 而在其余请求中没有收到的行为?

拜托,有更多知识的人可以提供一些启示吗?

于 2018-08-16T10:19:41.990 回答