Мы пытаемся отправить несколько запросов на целевой сервер за один HttpClient (один сеанс). Целевой сервер сначала аутентифицирует все запросы с помощью дайджест-аутентификации (на основе MD5-sessions). Результат показывает, что только первый доступ является успешным. Следующие ниже обращения отклоняются сервером, поскольку сервер рассматривает последующие обращения как атаку повторного воспроизведения, поскольку значение «nc» всегда равно «00000001».
Кажется, что Android HttpClient жестко запрограммировал заголовок авторизации дайджеста attirbute "nc" на "00000001"?
Есть ли способ для клиента увеличить это значение при отправке нового запроса? Спасибо.
public class 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));
}
}