在HttpClient中保留会话

时间:2013-04-27 21:18:44

标签: java android cookies web-scraping httpclient

我正试图登录wesbite。在我第一次请求时,我在登录页面上使用用户名和密码进行POST,并成功登录。使用相同的HttpClient实例,我在网站上的另一个页面上做了第二个请求,这次是一个GET请求,但这次,返回的页面没有登录。我认为这是因为第二个请求正在新的会议中完成。

在第一次请求之后,在它返回的许多cookie中,这是会话ID cookie:

name: ASPSESSIONIDSCSCSBCS
value: GBAJALJBOGKBFLAELPNKEDOE

在第二个请求之后,在许多其他cookie中,我有两个不同的会话ID cookie:

name: ASPSESSIONIDSCSCSBCS
value: GBAJALJBOGKBFLAELPNKEDOE

name: ASPSESSIONIDSCSCSBCS
value: MBAJALJBDBOKPEHNCDDFOCBC

我假设因为会话ID在第二个请求期间不同,它会忽略具有第一个会话ID的cookie。

我该如何解决这个问题?

编辑:这是我的代码

public HttpClient httpclient = new DefaultHttpClient();
public CookieStore cookieStore = new BasicCookieStore();
public HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);

//The first request 
 HttpPost httppost = new HttpPost("http://www.deeproute.com/deeproute/default.asp");
 List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
 nameValuePairs.add(new BasicNameValuePair("cookieexists","false"));
 nameValuePairs.add(new BasicNameValuePair("name", mUser));
 nameValuePairs.add(new BasicNameValuePair("password", mPassword));
 nameValuePairs.add(new BasicNameValuePair("subbera", "Login"));

 httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
 res = httpclient.execute(httppost, localContext);

//The second request
 HttpGet rosterGet = new HttpGet("http://deeproute.com/deeproute/?sel=rosterlook&myleagueno=6&myteamno=12");
 res = httpclient.execute(rosterGet, localContext);

1 个答案:

答案 0 :(得分:0)

我认为你应该用

覆盖cookieStore
 cookieStore = (BasicCookieStore) httpClient.getCookieStore();

仅在登录成功后才发生..
之后我认为你应该用新的cookieStore重新设置Context 让我知道!