В настоящее время я использую DefaultHttpClient с ThreadSafeClientConnManager. Это работает нормально, но я хотел бы заменить это с помощью AndroidHttpClient. К сожалению, я не могу добавить UsernamePasswordCredentials, что в данный момент важно для меня. Кто-нибудь может дать совет или решение?
Я знаю, что вопрос старый, но для того, чтобы кто-то наткнулся на это (как я), вы можете свернуть заголовок самостоятельно с помощью объекта HttpGet. Вот так:
HttpGet
httpGet.addHeader("Authorization", "Basic " + Base64.encode(username+":"+password));
Некоторое улучшение ответа Саада Фарука, у меня работает следующий код.
final AndroidHttpClient client = AndroidHttpClient.newInstance("Android"); getRequest = new HttpGet(url); getRequest.addHeader("Authorization", "Basic " + Base64.encodeToString(new String(username + ":" + password).getBytes(), Base64.NO_WRAP));
Вам нужно использовать HttpRequestInterceptor класс для аутентификации.
HttpRequestInterceptor
Вот пример
HttpRequestInterceptor httpRequestInterceptor = new HttpRequestInterceptor() { public void process(final HttpRequest request, final HttpContext context) throws HttpException, IOException { AuthState authState = (AuthState) context.getAttribute(ClientContext.TARGET_AUTH_STATE); CredentialsProvider credsProvider = (CredentialsProvider) context.getAttribute( ClientContext.CREDS_PROVIDER); HttpHost targetHost = (HttpHost) context.getAttribute(ExecutionContext.HTTP_TARGET_HOST); if (authState.getAuthScheme() == null) { AuthScope authScope = new AuthScope(targetHost.getHostName(), targetHost.getPort()); Credentials creds = credsProvider.getCredentials(authScope); if (creds != null) { authState.setAuthScheme(new BasicScheme()); authState.setCredentials(creds); } } } };