HttpClient でログインした後、Web サイトをナビゲートしようとしています。
まず、Cookie ストアと共に HttpClient のインスタンスを定義します。
public HttpClient httpclient = new DefaultHttpClient();
public CookieStore cookieStore = new BasicCookieStore();
public HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
1つの(Android)BackgroundTaskで、Webサイトに正常にログインしました。
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 で、同じ Web サイトの別のページへの接続を試みます。
HttpGet rosterGet = new HttpGet("http://deeproute.com/deeproute/?sel=rosterlook&myleagueno=6&myteamno=12");
res = httpclient.execute(rosterGet, localContext);
ただし、このページに接続すると、ログインしていません。ログインに成功した後もCookieが残っているので、途方に暮れています。
編集: 記録のために、この Web サイトは通常のブラウザーから完全に正常に機能します。
編集2:以下のアーロンの回答に応じて、最初のリクエストの後に私がこれを行うため、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());
}
ユーザー名が保存されているものを含め、4 つの Cookie が返されます。2 番目のリクエストの後に同じことを行うと、実際には 6 個の Cookie が返されます。明らかに、新しいセッション ID が得られるからです。これが問題の原因のようですが、修正方法がわかりません。
最初のリクエストの後、これが私のセッション ID Cookie です。
name: ASPSESSIONIDSCSCSBCS
value: GBAJALJBOGKBFLAELPNKEDOE
2 番目のリクエストの後、2 つのセッション ID Cookie があります。
name: ASPSESSIONIDSCSCSBCS
value: GBAJALJBOGKBFLAELPNKEDOE
name: ASPSESSIONIDSCSCSBCS
value: MBAJALJBDBOKPEHNCDDFOCBC