在我的Application
课程中,我会执行以下操作:
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);
}
...
}
我在Runnable
部分有一个连接:
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(...) { ... }
我使用Cookiee
得到cookieStore
并设置了Cookie,但我什么都没得到,它返回null
。
如何使用CookieStore
?
一些例子和答案给出了这个:
List<Cookie> cookies = app.client.getCookieStore().getCookies();
它也会为我返回null
。
答案 0 :(得分:1)
使用它来设置cookie。
首先,设置upcookieManager:
cookieManager = new java.net.CookieManager();
CookieHandler.setDefault(cookieManager);
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
接下来,通过setRequestProperty()
将Cookie设置为HttpUrlConnection 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());
}
}
}
答案 1 :(得分:1)
设置cookie:
conn.setRequestProperty("Cookie", "cookieName=cookieValue; domain=www.test.com");
获取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();
}