2016-07-26 6 views
1

私はJavaNetCookieJar OKHttpライブラリに使用していますが、コードは次のリンクにあります。複数のCookieヘッダーOKHttp JavaNetCookieJar

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

JavaNetCookieJarは、それが唯一の「のSet-Cookie」を

をgitのハブコードルックスを掘り下げた後、以前の応答が複数を受けた厳しい要求に非常に最初のクッキーを追加する問題を抱えているように見えます私は次のコードに基づいて明示的にクッキーのリストを指定しなければなりません "// 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を必要とするように興味を持っているクッキーのリストをハードコーディングすることなく、これをinsatiateする方法を私を助けてください。

助けてください。おかげ

答えて

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

を高く評価しています
関連する問題