Android アプリケーションで多くの http 呼び出しを行っています。http 呼び出しは、ほとんどの場合同期的です。ときどき、403 禁止応答が連続して返され、同じ URL にアクセスすることがあります。403 になる呼び出しの直前にログイン呼び出しを行います。ログイン呼び出しは 200 ok を返します。403 は、新しい Android プラットフォームでも頻繁に発生します。
クライアントの作成方法:
// Create and initialize HTTP parameters
HttpParams params = new BasicHttpParams();
ConnManagerParams.setMaxTotalConnections(params, 200);
ConnPerRoute cpr = new ConnPerRoute() {
public int getMaxForRoute(HttpRoute httpRoute) {
return 50;
}
};
ConnManagerParams.setMaxConnectionsPerRoute(params, cpr);
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
// Create and initialize scheme registry
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
// Create an HttpClient with the ThreadSafeClientConnManager.
ClientConnectionManager cm = new ThreadSafeClientConnManager(params, schemeRegistry);
_client = new DefaultHttpClient(cm, params);
http 呼び出し:
CookieStore cookie_store = HttpSupport.getCookieStoreInstance();
HttpContext http_context = HttpSupport.getHttpContextInstance();
HttpGet get = new HttpGet(StaticFields.DEVICES_RESOURCE);
http_context.setAttribute(ClientContext.COOKIE_STORE, cookie_store);
response = client.execute(get, http_context);
status_code = response.getStatusLine().getStatusCode();
クラス HttpSupport に含まれる静的 CookieStore と HttpContext を使用しています。