安卓cookie问题……

DespicableM 2014-07-30 05:38:49
众所周知,我们在开发一些手机客服端常常会用到Json解析,这就需要我们访问网页取得Json值,也就是会用到http来获取网页上的Json值。但是对于一般的网站来说都会有个cookie检测,如果你的cookie未被检测到,就会被服务器认为是不合法的访问,相应的客服端也就不会取得值。
现在我的问题是这样的:这是一个网站xxxx.com,登陆页为xxx.com/login.jsp,登陆方式为get,也就是xxx.com/login.jsp?username=xx&password=xx。登陆成功后从此页都取得了Json值,但是用http来获取另一个页面的Json时就是null,我认为这是cookie问题,因为这里每一个Json页面都有cookie检测,求大神指导,如何办…………

这是MainAcitity.java
package com.bat.tenma.activity;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import com.bat.tenma.json.JsonTools;
import com.bat.tenma.service.Myservice;
import com.bat.tenme.http.HttpTools;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
//定义控件
private Button bt_login;

//定义一些全局变量
private int lastdata = 0;
private int nowdata;
private String JsonData;
private String url = "http://xxx.com/login.jsp?username=xx&password=abc";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt_login = (Button) findViewById(R.id.button1);

bt_login.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
if (JsonTools.isLogin(getJsonData())) {
System.out.println("登陆成功");
}
url = "http://xxx.com/mobile_borad_list.jsp";
lastdata=JsonTools.getTotal(getJsonData());
Log.i("TAG", ""+lastdata);

}
});

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

//获取JsonData的值
public String getJsonData() {
Mythread mt = new Mythread();
mt.start();
try {
mt.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.i("TAG", "JsonData:" + JsonData);
return JsonData;
}

//安卓4.0以后网络访问只有在线程里面来进行了
private class Mythread extends Thread {
@Override
public void run() {

try {
// ----------------------用get方式------------------------------
HttpGet httpGet = new HttpGet(url);
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(httpGet);
int code = response.getStatusLine().getStatusCode();
if (code == 200) {
InputStream is = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(
new InputStreamReader(is));
String result = "";
String line = "";
while ((line = reader.readLine()) != null) {
result = result + line;
}
Log.i("TAG", "result:" + result);
JsonData = result;
}

} catch (Exception e) {
e.printStackTrace();
}

}
}

}


这是JsonTools.java
package com.bat.tenma.json;

import org.json.JSONObject;

import android.R.integer;
import android.util.Log;

public class JsonTools {
public static JSONObject result;
public static boolean isLogin(String JsonData) {
try {
result = new JSONObject(JsonData);
String success = result.get("success").toString();
Log.i("TAG", "success:"+success);
if(success.equals("true"))
{
Log.i("TAG", "登陆成功");
return true;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;

}

public static int getTotal(String JsonData){
try {
result = new JSONObject(JsonData);
int total = (Integer) result.get("total");
Log.i("TAG", "total:"+total);
return total;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 0;
}
// 生成 JSON 对象

}


...全文
308 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
苏恨 2015-08-04
  • 打赏
  • 举报
回复
登录的时候获取cookie ,然后再次请求数据加载cookie 么? 我还是不明白, 我第二次请求不到数据啊
lionfresh 2014-07-31
  • 打赏
  • 举报
回复
引用 6 楼 u010849674 的回复:
[quote=引用 3 楼 lionfresh 的回复:] [quote=引用 2 楼 u010849674 的回复:] [quote=引用 1 楼 lionfresh 的回复:] cookie = Util.trimCookie(conn.getHeaderField("Set-Cookie"));
这个貌似只是获取cookie,但是怎么把他加载到第二次http请求中呢?[/quote] conn.addRequestProperty("Cookie", cookie);[/quote] 不管怎样,还是感谢[/quote] 呵呵,解决了就好,结贴?
DespicableM 2014-07-31
  • 打赏
  • 举报
回复
引用 3 楼 lionfresh 的回复:
[quote=引用 2 楼 u010849674 的回复:] [quote=引用 1 楼 lionfresh 的回复:] cookie = Util.trimCookie(conn.getHeaderField("Set-Cookie"));
这个貌似只是获取cookie,但是怎么把他加载到第二次http请求中呢?[/quote] conn.addRequestProperty("Cookie", cookie);[/quote] 不管怎样,还是感谢
DespicableM 2014-07-31
  • 打赏
  • 举报
回复
引用 3 楼 lionfresh 的回复:
[quote=引用 2 楼 u010849674 的回复:] [quote=引用 1 楼 lionfresh 的回复:] cookie = Util.trimCookie(conn.getHeaderField("Set-Cookie"));
这个貌似只是获取cookie,但是怎么把他加载到第二次http请求中呢?[/quote] conn.addRequestProperty("Cookie", cookie);[/quote] 朋友,你这个方法我试了一下不行……可能是我的原因!不过如果采用你的方法我就需要改很多代码,所以我去查了一下关于httpclient加载cookie 的方法,最终成功了!
DespicableM 2014-07-31
  • 打赏
  • 举报
回复
取得cookie
List<Cookie> cookies = httpClient.getCookieStore().getCookies();
		if (cookies.isEmpty()) {
			Log.i("TAG", "-------Cookie NONE---------");
		} else {
			for (int i = 0; i < cookies.size(); i++) {
				// 保存cookie
				cookie = cookies.get(i);
				Log.i("TAG", cookie.toString());
			}
		}
加载cookie
if (cookie != null) {
					Log.i("TAG", "加载cookie");
//					httpGet.setHeader("Cookie", cookie.toString());
					httpGet.setHeader("Cookie", "JSESSIONID=" +cookie.getValue() ); 
				}
最终成功……和我有同样问题的朋友可以随时问我
DespicableM 2014-07-30
  • 打赏
  • 举报
回复
引用 3 楼 lionfresh 的回复:
[quote=引用 2 楼 u010849674 的回复:] [quote=引用 1 楼 lionfresh 的回复:] cookie = Util.trimCookie(conn.getHeaderField("Set-Cookie"));
这个貌似只是获取cookie,但是怎么把他加载到第二次http请求中呢?[/quote] conn.addRequestProperty("Cookie", cookie);[/quote] 我试一下,先表示感谢
lionfresh 2014-07-30
  • 打赏
  • 举报
回复
引用 2 楼 u010849674 的回复:
[quote=引用 1 楼 lionfresh 的回复:] cookie = Util.trimCookie(conn.getHeaderField("Set-Cookie"));
这个貌似只是获取cookie,但是怎么把他加载到第二次http请求中呢?[/quote] conn.addRequestProperty("Cookie", cookie);
DespicableM 2014-07-30
  • 打赏
  • 举报
回复
引用 1 楼 lionfresh 的回复:
cookie = Util.trimCookie(conn.getHeaderField("Set-Cookie"));
这个貌似只是获取cookie,但是怎么把他加载到第二次http请求中呢?
lionfresh 2014-07-30
  • 打赏
  • 举报
回复
cookie = Util.trimCookie(conn.getHeaderField("Set-Cookie"));

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧