HttpURLConnection使用cookie

利用HttpURLConnection进行网络请求,需要使用cookie,走了一些弯路,现在的方案是使用cookiemanager。

http://developer.android.com/reference/android/webkit/CookieManager.html

我用的是android.webkit.CookieManager,而不是java.net.CookieManager

参考:

android 给url添加cookie

HttpURLConnection与 CookieManager 实现Post提交请求和Cookie管理

先上目前的方案:

1. 在app启动的时候,设置一个cookiemanager的实例

写在APP的oncreate里面:

CookieSyncManager.createInstance(this);


2. 设置,获取

	protected String getCookie() {
		CookieManager cookieManager = CookieManager.getInstance();
		String cookie = cookieManager.getCookie("cookie");
		if (cookie != null) {
			return cookie;
		} else {
			return "";
		}
	}
	
	protected void setCookie(String cookie) {
		CookieManager cookieManager = CookieManager.getInstance();
		cookieManager.setCookie("cookie", cookie);
	}


3. 过期按需处理一下


附1:cookie的获取

response.headerFields = conn.getHeaderFields();
setCookies(response.headerFields);

/**
 * 存储cookie
 * @param headerFields 
 */
protected void setCookies(Map<String, List<String>> headerFields) {
	if (null == headerFields) {
		return;
	}
	List<String> cookies = headerFields.get(COOKIES_KEY);
	if (null == cookies) {
		return;
	}
	for (String cookie : cookies) {
		setCookie(cookie);
	}
}
COOKIE_KEY="Set-Cookie"

附2:之前的弯路

之前主要是对cookie不理解,以为网络返回什么我就原样存什么,下次再发出去,完全理解错了。

其实每次返回的是"Set-Cokkie",从字面理解,就是设置cookie,并不是完全覆盖,而是它返回的这些cookie是需要重新设置的,而它里面没有返回的cookie则不变。

因此,每次对cookie处理,其实应该只是一个更新部分cookie的过程,而不是将Set-Cokkie中的那些cookie完全取代本地的。

所以,按照我之前的错误理解,每次都将"Set-Cokkie"中的cookie完全覆盖的本地的cookie,将一些不在"Set-Cokkie"中的cookie给清理掉了,所以下次访问的时候,会缺失有用的cookie而导致服务端认证失败






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值