1 つの HttpClient (1 セッション) でターゲット サーバーに複数のリクエストを送信しようとします。ターゲット サーバーは、最初にすべての要求をダイジェスト認証 (MD5-sess に基づく) で認証します。結果は、最初のアクセスのみが成功したことを示しています。"nc" 値は常に "00000001" であるため、サーバーはその後のアクセスをリプレイ攻撃として処理するため、次のアクセスはサーバーによって拒否されます。
Android HttpClient は、ダイジェスト承認ヘッダーの属性「nc」を「00000001」にハードコーディングしているようです。
新しいリクエストが送信されたときにクライアントがこの値を増やす方法はありますか? ありがとう。
パブリック クラス HttpService {
private static final HttpService instance = new HttpService();
private HttpService() {
client = getHttpClient();
}
public static HttpService getInstance() {
return instance;
}
private DefaultHttpClient getHttpClient() {
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setStaleCheckingEnabled(params, false);
HttpConnectionParams.setConnectionTimeout(params, 15 * 1000);
HttpConnectionParams.setSoTimeout(params, 15 * 1000);
HttpConnectionParams.setSocketBufferSize(params, 8192);
HttpProtocolParams.setUserAgent(params, USER_AGENT);
SchemeRegistry schemeRegistry = new SchemeRegistry();
Scheme httpScheme = new Scheme("http", PlainSocketFactory.getSocketFactory(), 80);
Scheme httpsScheme = new Scheme("https", SSLCertificateSocketFactory.getHttpSocketFactory(30 * 1000, null), 443);
schemeRegistry.register(httpScheme);
schemeRegistry.register(httpsScheme);
ClientConnectionManager manager = new ThreadSafeClientConnManager(params, schemeRegistry);
//create client
DefaultHttpClient httpClient = new DefaultHttpClient(manager, params);
httpClient.getCredentialsProvider().setCredentials(new AuthScope(address, port),
new UsernamePasswordCredentials(username, password));
}
}