2016-07-26 25 views
1

我一直在使用JavaNetCookieJar OKHttp庫和代碼是在下面的鏈接。多個Cookie標頭OKHttp JavaNetCookieJar

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

JavaNetCookieJar似乎有問題,它只是增加了第一個cookie來請求強硬之前的響應已收到多個「設置Cookie」

挖下來的git-樞紐代碼照顧就像我必須根據下面的代碼顯式指定cookies的列表「// RI通過所有頭文件,我們沒有'em',所以我們不通過'em!'

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

有人可以幫助我如何在沒有硬編碼cookies的列表的情況下讓我知道,因爲我需要所有的cookies。

任何幫助表示讚賞。由於

回答

0

我端到了這樣做,但任何強大的解決方案表示讚賞

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