2012-01-19 6 views
3

Так что в основном мне нужно приложение для Android для подключения к веб-службе с использованием URL-адреса как такового «http: // username: [email protected]» aka basic authentication. очевидно, что имя пользователя и пароль проверяются веб-приложением, прежде чем разрешать доступ и в противном случае не разрешают запрос.Android - базовый аутентифицированный HTTP-запрос

Моя проблема в том, что все методы, которые я стараюсь, всегда говорят неавторизованные (код ответа 401), независимо от того, какая комбинация классов и методов использовалась для попытки подключения к URL-адресу.

Веб-приложение, о котором идет речь, предназначено для возврата только в том случае, если un/pw очищается, иначе он ничего не возвращает, веб-приложение и un/pw и т. Д. Все будут проверены и очищены.

так ли кто-нибудь не может отправить запрос на такой URL-адрес и заставить его работать правильно?

андроид api8 кстати

UPDATE Оказывается, моя проблема связана с веб-приложение, с помощью проверки подлинности NTLM окна, которая не поддерживается непосредственно библиотекой андроиды/Apache HTTP, исследуя соответствующие обходные пути в настоящее время

+0

Что вы пробовали именно? Веб-сайт, скорее всего, использует базовую или дайджест-аутентификацию, все, что вам нужно сделать, это создать соответствующие заголовки и добавить их в свой запрос. У HttpClient даже есть API для этого. –

+0

различных реализаций добавления заголовков или информации аутентификации в запрос, такой как те, что указаны в HTTPClient, и, например, то, что было опубликовано ниже –

+0

Это все равно ничего не значит без фактических данных. Тем не менее, главный вопрос: вы на 100% используете ваш сервер Basic auth? Это может быть дайджест-аутентификация или какая-то пользовательская схема. Получите проволочные дампы, журналы сервера и т. Д. –

ответ

8

Вот некоторый код формирует действительно старый мой проект. Я использовал базовый auth для некоторых веб-сервисов, и это работало в то время. Я не уверен, что с тех пор обновлен api (это был Android 1.6), но он все равно должен работать.

 HttpGet request = new HttpGet(); 
     request.setURI(new URI(url)); 

      UsernamePasswordCredentials credentials = 
       new UsernamePasswordCredentials(authUser, authPass); 
      BasicScheme scheme = new BasicScheme(); 
      Header authorizationHeader = scheme.authenticate(credentials, request); 
      request.addHeader(authorizationHeader); 

В основном, базовый HTTP-аутентификатор - простой хэш пользователя и пароль. Браузер позволяет набирать эти значения в URL-адресе, но на самом деле он делает работу по добавлению основного заголовка auth к вашему запросу.

+0

вы объединяете две первые строки в одну для новых версий api, например HttpGet request = new HttpGet (url); К сожалению, это не решило мою проблему, я начал думать о своей проблеме с фактической стороной веб-приложения: s –