使用 HttpClient 登录后,我正在尝试浏览网站。
我首先定义一个 HttpClient 的实例和一个 cookie 存储:
public HttpClient httpclient = new DefaultHttpClient();
public CookieStore cookieStore = new BasicCookieStore();
public HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
在一个(android)BackgroundTask 中,我成功登录了该网站。
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);
在此之后,在另一个 BackgroundTask 中,我尝试连接到同一网站上的不同页面:
HttpGet rosterGet = new HttpGet("http://deeproute.com/deeproute/?sel=rosterlook&myleagueno=6&myteamno=12");
res = httpclient.execute(rosterGet, localContext);
但是,当我连接到此页面时,我不再登录。我看了看,成功登录后 cookie 仍然存在,所以我不知所措。
编辑:为了记录,这个网站在普通浏览器上完全正常运行。
编辑 2:响应 Aaron 在下面的回答,cookie 似乎正在保存,因为如果在第一个请求之后,我会这样做:
List<Cookie> cookies = cookieStore.getCookies();
int cookieSize = cookies.size();
for (int i = 0; i < cookieSize; i++) {
Log.v(TAG, "Cookie " + i + "name: "
+ cookies.get(i).getName());
Log.v(TAG, "Cookie " + i + "value: "
+ cookies.get(i).getValue());
}
我取回了四个 cookie,其中一个存储了我的用户名。如果我在第二个请求后做同样的事情,我实际上会得到 6 个 cookie,因为显然它给了我一个新的会话 ID。这似乎是问题的根源,但我不知道如何解决它。
在第一个请求之后,这是我的会话 ID cookie:
name: ASPSESSIONIDSCSCSBCS
value: GBAJALJBOGKBFLAELPNKEDOE
在第二个请求之后,我有两个会话 ID cookie:
name: ASPSESSIONIDSCSCSBCS
value: GBAJALJBOGKBFLAELPNKEDOE
name: ASPSESSIONIDSCSCSBCS
value: MBAJALJBDBOKPEHNCDDFOCBC