2016-12-07 4 views
1

Я использую класс HttpURLConnection для управления HTTP-соединениями в своем приложении для Android. Проблема в том, что на некоторых серверах у меня есть код , используя URL-адрес, который работает в интернет-навигаторе. Я инициализирую соединение с базовой аутентификацией, но я думаю, что этим серверам нужен другой режим. Я знаю, что он работает с Libcurl и следующей инструкции:HttpURLConnection authentication mode

curl_easy_setopt(pCurlHandle, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 

Но есть ли способ сделать что-то подобное на Android? В настоящее время я делаю это:

... 
connection.setRequestProperty("Authorization", "Basic " + Base64.encode("username:password")); 
... 

Я попытался с Authenticator тоже:

Authenticator.setDefault(new Authenticator() { 

    @Override 
    protected PasswordAuthentication getPasswordAuthentication() 
    { 
     return new PasswordAuthentication("username", "password".toCharArray()); 
    } 
}); 

Но я до сих пор в моем приложении 401. Есть идеи?

ответ

1

Ну this post действительно помогли мне (но я не использую Authenticator класс вообще), и теперь мой код сделать работу, как, что (если необходима аутентификация):

  • Инициализировать мой HttpURLConnection объект Basic аутентификации (см первого образца Java в коде на мой вопрос в)

  • тест, если я получаю код 401, и если это так, проверьте, если сервер был освобожденным для Дайджест аутентификация, анализирующая заголовки ответов.

  • Retry с ручным встроенным Digest запроса собственности (см пост я упоминал)

  • И это работает!

Надеюсь, этот ответ поможет кому-то!

Смежные вопросы