How to get cookies in HttpUrlConnection by using CookieStore?
17,506
Solution 1
Use this to set cookies.
First, set upcookieManager:
cookieManager = new java.net.CookieManager();
CookieHandler.setDefault(cookieManager);
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
Next, set cookies to HttpUrlConnection by setRequestProperty()
if (cookieManager.getCookieStore().getCookies().size() > 0) {
List<HttpCookie> cookies = cookieManager.getCookieStore().getCookies();
if (cookies != null) {
for (HttpCookie cookie : cookies) {
conn.setRequestProperty("Cookie", cookie.getName() + "=" + cookie.getValue());
}
}
}
Solution 2
set cookie :
conn.setRequestProperty("Cookie", "cookieName=cookieValue; domain=www.test.com");
get cookie :
Map<String, List<String>> headerFields = conn.getHeaderFields();
List<String> cookiesHeader = headerFields.get("Set-Cookie");
if(cookiesHeader != null){
String cookie = cookiesHeader.get(0);
HttpCookie httpCookie = HttpCookie.parse(cookie).get(0);
String name = httpCookie.getName();
String value = httpCookie.getValue();
String domain = httpCookie.getDomain();
}
Author by
sique
Master course in Korea University. Information and Communication College , major in Computer Science. Embedded Software Engineering LAB
Updated on June 11, 2022Comments
-
sique about 2 years
In my
Application
class, I do the following:public class MyApplication extends Application { private static HttpURLConnection conn = null; public static CookieStore cookieStore; public static HttpContext localContext; public static DefaultHttpClient client = new DefaultHttpClient(); @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); CookieSyncManager.createInstance(this); cookieStore = new BasicCookieStore(); localContext = new BasicHttpContext(); localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore); } ... }
And I have a connection in
Runnable
parts:HttpURLConnection conn = null; URL url; try { url = new URL(requestUrl); conn = (HttpURLConnection) url.openConnection(); if (Integer.parseInt(Build.VERSION.SDK) < Build.VERSION_CODES.FROYO) { System.setProperty("http.keepAlive", "false"); } conn.setConnectTimeout(8000); conn.setRequestMethod(method); conn.setInstanceFollowRedirects(false); conn.setRequestProperty("Content-Type","application/x-www-form-urlendcoded"); MyApplication app = (MyApplication) mContext.getApplicationContext(); ******************************************* if(app.cookieStore.getCookies()!=null){ conn.setRequestProperty("Cookie", app.cookieStore.getCookies().toString()); Log.d("tag", "cookie get " + cookie.getCookie(mContext.getString(R.string.host_url))); } ********** this part not work ********** Map m = conn.getHeaderFields(); if (m.containsKey("Set-Cookie")) { String cookies = ""; Collection c = (Collection) m.get("Set-Cookie"); for (Iterator i = c.iterator(); i.hasNext();) { cookies += (String) i.next() + ","; } cookie.setCookie(mContext.getString(R.string.host_url), cookies); Log.d("tag", "cookie set " + cookies); } } catch(...) { ... }
I get
Cookiee
by usingcookieStore
and also set cookies, but I get nothing, it returnsnull
.
How useCookieStore
?Some example and answer give this:
List<Cookie> cookies = app.client.getCookieStore().getCookies();
It also returns
null
for me.