HTTP GET (および場合によっては POST) 要求を使用して (プライベート) フォーラムに「接続」する Android アプリを作成しました。基本的な考え方は次のとおりです。
ユーザーが資格情報を送信するログイン ページ。ログインは、パラメータとしてユーザー名とパスワードを使用して、フォーラムのログイン ページに HTTP POST (GET を試しても同じ結果) を実行することによって実行されます。リクエストは、
BasicCookieStore
.アクセスしたいフォーラムのすべてのページは、HTTP GET を使用して取得されます。取得した HTML ソースを解析し、関連する情報のみを表示します。ユーザーを認証するために
BasicCookieStore
、ログイン (ステップ 1) に使用したものと同じものがHttpClient
.
この方法は、テスト中ずっと機能しており、ベータ テスターにも機能しています。アプリをリリースした今、多くのユーザーが特にモバイル接続で問題を抱えていることが明らかになりました(Wifi は問題ないようです)。
すべての HTTP GET 要求で返された HTML ソースをログに記録することにより、実際のログインは正常に機能するのではないかと強く疑っていますが、どういうわけか、Cookie が返されたり、保存されたり、その方向に何かが行われたりしません。問題は、彼らが受け取る最初のページの HTML ソースがフォーラムのリストでなければならないことです。ただし、問題のあるユーザーの場合、基本的に「このページを表示するには Javascript を有効にする必要があります」というページが表示されます。
奇妙なことに、テスト時にそのページが表示されず、多くのユーザーも表示されません。さらに悪いことに、一部のユーザーは、数日または数週間は問題なく機能していたと報告しており、現在は機能しなくなっています. 他の人は正反対です: 何日も働いていないのに、突然働き始めます。あるユーザーは、ギリシャに 2 週間滞在したところ、問題なく動作し、その後ドイツに戻ったところ、再び動作しなくなったと報告しています。ここにはランダムな要素が働いているようです。
主にHTTP GETリクエストを行う方法で、さまざまなことを試しました。DefaultHttpClient
次のようなさまざまな設定で、通常の を使い始めました。
HttpClient httpClient = new DefaultHttpClient();
// Define parameters
HttpParams httpParams = httpClient.getParams();
HttpConnectionParams.setConnectionTimeout(httpParams, TIMEOUT);
HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT);
HttpProtocolParams.setVersion(httpParams, HttpVersion.HTTP_1_1);
// Set cookiestore (getCookieStore returns the same cookiestore)
HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, getCookieStore());
HttpGet http = new HttpGet(url);
http.addHeader("Accept", ACCEPT_STRING);
http.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
// Execute
HttpResponse response = httpClient.execute(http, localContext);
//... Process result (omitted)
今、代わりに AndroidHttpClient を使用するように切り替えましたが、残りのコードは基本的に変更されておらず、同じ結果が得られるようです。
また、まったく異なる動作をする AsyncHttpClient ライブラリを使用してみましたが、やはり同じ結果になりました。私もその PersistentCookieStore を使用してみましたが、あなたはそれを推測しました - 同じ結果です。
この時点で私は無知です。私は間違った方向を見ていますか?すべてのユーザーではなく、一部のユーザーに対して Web サイトが「Javascript を有効にする必要があります」と応答するという事実は、Cookie の問題を示しているようです。JavaScriptが有効かどうかをウェブサイトがどのように判断するかはわかりませんが、確かにHTTP GETリクエストではJavaScriptが使用されていません. では、なぜ私 (および他の多くのユーザー) は問題なくページにアクセスできるのに、他のユーザーには「JavaScript がありません」というメッセージが表示されるのでしょうか? 私が考えることができる唯一の理由はクッキーですが、問題が正確に何であるかはわかりません.
どんな助けでも大歓迎です!