2013-05-26 3 views
3

Я пытаюсь получить доступ к веб-сервису от android, для которого требуется полная аутентификация. Для этого я использую Basic http authentication.HttpClient Authentication в Android

Я попытался установить UserNamePasswordCredentials, а также настроить заголовки в запросе HttpGet, но все в вену. Пожалуйста, скажите мне, что я делаю неправильно.

код я использую для установки заголовков в HttpGet запроса:

HttpGet requestLogin = new HttpGet(url);    
requestLogin.addHeader("Authorization", "Basic " + Base64.encodeToString((username+":"+password).getBytes(), Base64.NO_WRAP)); 

код я использую, чтобы установить UserNamePassword полномочия:

DefaultHttpClient httpClient = new DefaultHttpClient(mgr, tempClient.getParams()); 
httpClient.getCredentialsProvider().setCredentials(
        AuthScope.ANY, 
        new UsernamePasswordCredentials(username,password)); 

Это исключение я получаю при использовании этого кода :

05-26 17:21:22.234: E/res(1651): <html><head><title>Apache Tomcat/6.0.35 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 401 - Bad credentials</h1><HR size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> <u>Bad credentials</u></p><p><b>description</b> <u>This request requires HTTP authentication (Bad credentials).</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/6.0.35</h3></body></html> 

Когда я использую эти же учетные данные в браузере, он работает. Таким образом, учетные данные не являются некорректными. Пожалуйста, дайте мне знать, что я делаю неправильно. Я полностью застрял в нем.

Заранее спасибо.

ответ

3

Я просто попытался ручной вариант заголовка HTTP, он должен работать с Base64.Default флагом:

requestLogin.addHeader("Authorization", "Basic " + 
    Base64.encodeToString((username+":"+password).getBytes(), Base64.DEFAULT)); 
+0

Я пробовал, но он вернулся «Ваш браузер послал запрос, что этот сервер не мог понять» –

+0

Try для входа в веб-службу с помощью Firefox с открытой веб-консолью. Затем нажмите на запрос и посмотрите заголовок авторизации. Действительно ли это начинается с Basic? Сравните следующую строку base64 со строкой, которая генерируется вашим кодом. –

+0

Спасибо @Torben. Мой предыдущий код работал для меня. Проблема была вызвана символом «\» в моем имени пользователя. Декодировал его с вашей помощью. Благодаря тонну. –