androidcookieshttpurlconnectionandroid-cookiemanager

How to handle cookies in httpUrlConnection using cookieManager


I have a server request that returns multiple cookies, like that:

enter image description here

This is how I'm storing these cookies to the cookieManager:

HttpURLConnection connection = ... ;
static java.net.CookieManager msCookieManager = new java.net.CookieManager();
msCookieManager.put(COOKIES_URI, connection.getHeaderFields());

This is how I'm adding these cookies to the next connection:

connection.setRequestProperty("Cookie", 
  msCookieManager.getCookieStore().get(COOKIES_URI).toString());

Is it the right way to get the cookies from the cookieManager?, I'm quite sure there is a better one...


Solution

  • Ok, the right way to do it is just like that:

    Get Cookies from response header and load them into cookieManager:

    static final String COOKIES_HEADER = "Set-Cookie";
    HttpURLConnection connection = ... ;
    static java.net.CookieManager msCookieManager = new java.net.CookieManager();
    
    Map<String, List<String>> headerFields = connection.getHeaderFields();
    List<String> cookiesHeader = headerFields.get(COOKIES_HEADER);
    
    if (cookiesHeader != null) {
        for (String cookie : cookiesHeader) {
            msCookieManager.getCookieStore().add(null,HttpCookie.parse(cookie).get(0));
        }               
    }
    

    Get Cookies from cookieManager and load them into connection:

    if (msCookieManager.getCookieStore().getCookies().size() > 0) {
        // While joining the Cookies, use ',' or ';' as needed. Most of the servers are using ';'
        connection.setRequestProperty("Cookie",
        TextUtils.join(";",  msCookieManager.getCookieStore().getCookies()));    
    }