私たちは、ユーザーがCaptchaへの回答を入力する必要のあるAndroidアプリケーションを用意しています。 キャプチャは当社のサーバー上に生成されます。 回答があれば、検証のためにサーバに送信されます。HttpURLConnectionを再利用してセッションを維持する
問題はCaptchaのリクエスト後にHttpURLConnectionを閉じる必要があるため、返信がサーバー上の別のセッションで実行されていることがわかりました。 このため、Captchaチェックはセッションに依存するため失敗します。
接続を維持する方法はありますか、別のパスに従うべきですか? 私は、同等のiPhoneアプリケーションでは、 "接続された"ままで、同じセッションIDを持っていることを知っています。
編集:
CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);
URL urlObj = new URL(urlPath);
conn = (HttpURLConnection) urlObj.openConnection();
if (urlPath.toLowerCase().startsWith("https:")) {
initializeHttpsConnection((HttpsURLConnection) conn);
}
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Language", "en-US");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", Integer.toString(bodyData.length));
if (_sessionIdCookie != null) {
conn.setRequestProperty("Cookie", _sessionIdCookie);
}
// Connect
conn.setDoInput(true);
conn.setDoOutput(true);
conn.connect();
「CookieManager」を定義したら、セッションIDを保持しているセッションを追加しますか? – theblitz
あなたのために重要な質問があります:API 9+(2.3+)を使用していますか?はいの場合は、接続する前にそれを追加するだけでOKです。 2.2以下を使用している場合は、org.apacheパッケージのHttpClientを使用する必要があります。 2.2の場合は、サンプルコードを追加します。 – DallaRosa
現時点では2.3に設定されていますが、そのように残すかどうかはわかりません。トップ2.2を落とすかもしれないが、確かではない。ここのデバイスの99%が2.3+だから大丈夫だと思う。 – theblitz