httpurlconnection中设置cookie的时机问题

遇到一个问题,先记录一下:

在用httpurlconnection进行post提交的时候,需要将之前得到的cookie带入,之前是这样写的,一直不成功:

			if (method == Method.GET) {
				conn = (HttpURLConnection) new URL(url).openConnection();
				conn.setRequestMethod("GET");
			} else if (method == Method.POST) {
				conn.setRequestMethod("POST");
				conn.setDoOutput(true);
				conn.setDoInput(true);
				conn.setUseCaches(false);
			}
			conn.setAllowUserInteraction(false);
			conn.setReadTimeout(requestOptions.readTimeout);
			conn.setConnectTimeout(requestOptions.connectTimeout);
			conn.addRequestProperty("Accept-Encoding", "gzip, deflate");

			/* add headers to the connection */
			for (final Map.Entry> entry : headers.getHeaders().entrySet()) {
				for (final String value : entry.getValue()) {
					conn.addRequestProperty(entry.getKey(), value);
				}
			}
			
			String cookieStr = getCookies();
			DEBUG.i("===get cookie===" + cookieStr);
			if (null != cookieStr) {
				conn.addRequestProperty("Cookie", cookieStr);
			}
上面代码最后的是设置cookie的地方。

这样写,服务器一直都因为cookie的原因返回一个错误的东西。

然后从网上看到一篇文章,写到,设置cookie要在设置post之前,java httpurlconnection 发送cookie时,cookie要在Post前发送
但是他也没有讲原因,于是就照着改了一下,将设置cookie提到了前面:

			String cookieStr = getCookies();
			DEBUG.i("===get cookie===" + cookieStr);
			if (null != cookieStr) {
				conn.addRequestProperty("Cookie", cookieStr);
			}
			
			if (method == Method.GET) {
				conn = (HttpURLConnection) new URL(url).openConnection();
				conn.setRequestMethod("GET");
			} else if (method == Method.POST) {
				conn.setRequestMethod("POST");
				conn.setDoOutput(true);
				conn.setDoInput(true);
				conn.setUseCaches(false);
			}
			conn.setAllowUserInteraction(false);
			conn.setReadTimeout(requestOptions.readTimeout);
			conn.setConnectTimeout(requestOptions.connectTimeout);
			conn.addRequestProperty("Accept-Encoding", "gzip, deflate");

			/* add headers to the connection */
			for (final Map.Entry> entry : headers.getHeaders().entrySet()) {
				for (final String value : entry.getValue()) {
					conn.addRequestProperty(entry.getKey(), value);
				}
			}

这样写了,post请求就ok了,原因还得探索。

另外,上面代码只是测试代码,没有考虑到get,所以还要稍加修改。

// TODO 需要找到这个原因





你可能感兴趣的:(Android)