【问题标题】:Multiple Cookies Headers OKHttp JavaNetCookieJar多个 Cookie 标头 OKHttp JavaNetCookieJar
【发布时间】:2016-07-26 17:49:07
【问题描述】:

我一直在使用 JavaNetCookieJar OKHttp 库,代码在下面的链接中。

https://github.com/square/okhttp/blob/master/okhttp-urlconnection/src/main/java/okhttp3/JavaNetCookieJar.java

JavaNetCookieJar 似乎存在问题,它仅将第一个 cookie 添加到请求中,而先前的响应已收到多个“Set-Cookie”

在挖掘 git-hub 代码之后,我似乎必须根据以下代码明确指定 cookie 列表“// RI 传递所有标头。我们没有它们,所以我们没有通过他们!”

 @Override public List<Cookie> loadForRequest(HttpUrl url) {
        // The RI passes all headers. We don't have 'em, so we don't pass 'em!
        Map<String, List<String>> headers = Collections.emptyMap();
        Map<String, List<String>> cookieHeaders;
        try {
            cookieHeaders = cookieHandler.get(url.uri(), headers);
        } catch (IOException e) {
            Platform.get().log(WARN, "Loading cookies failed for " + url.resolve("/..."), e);
            return Collections.emptyList();
        }

        List<Cookie> cookies = null;
        for (Map.Entry<String, List<String>> entry : cookieHeaders.entrySet()) {
            String key = entry.getKey();
            if (("Cookie".equalsIgnoreCase(key) || "Cookie2".equalsIgnoreCase(key))
                    && !entry.getValue().isEmpty()) {
                for (String header : entry.getValue()) {
                    if (cookies == null) cookies = new ArrayList<>();
                    cookies.addAll(decodeHeaderAsJavaNetCookies(url, header));
                }
            }
        }

        return cookies != null
                ? Collections.unmodifiableList(cookies)
                : Collections.<Cookie>emptyList();
    } 

有人可以帮助我如何在不对我感兴趣的 cookie 列表进行硬编码的情况下满足这一点,因为我需要所有的 cookie。

任何帮助表示赞赏。谢谢

【问题讨论】:

    标签: android okhttp okhttp3


    【解决方案1】:

    我最终这样做了,但任何强大的解决方案都值得赞赏

    public class CookieStore implements CookieJar {
    
        private final HashMap<String, List<Cookie>> _cookieStore = new HashMap<>();
    
        @Override
        public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
    
            List<Cookie> currentCookies = _cookieStore.get(url.host());
            List<Cookie> responseCookies = new ArrayList(cookies);
    
            if (currentCookies != null && responseCookies != null
                    && responseCookies.size() > 0 && currentCookies.size() > 0) {
                for (Cookie currentCookie : currentCookies) {
    
                    if (!responseCookies.contains(currentCookie) && (currentCookie.value()!=null && currentCookie.value()!="")) {
                        responseCookies.add(currentCookie);
                    }
                }
            }
    
            _cookieStore.put(url.host(), responseCookies);
        }
    
        @Override
        public List<Cookie> loadForRequest(HttpUrl url) {
    
            List<Cookie> cookies = _cookieStore.get(url.host());
            List<Cookie> requestCookies = new ArrayList<>();
    
            if (cookies != null && cookies.size() > 0) {
                for (Cookie currentCookie : cookies) {
                    if ((currentCookie.value()!=null && currentCookie.value()!="")) {
                        requestCookies.add(currentCookie);
                    }
                }
            }
    
            return requestCookies != null ? requestCookies : new ArrayList<Cookie>();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-04
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 2015-12-21
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      相关资源
      最近更新 更多