Как сделать HTTP-аутентификацию в android?


Я проверяю класс org.апаш.http.автор. Еще одна ссылка или пример, если кто-то есть?

6 71

6 ответов:

Я не встречал этот конкретный пакет раньше, но он говорит, что это для аутентификации HTTP на стороне клиента, которую я смог сделать на Android с помощью java.net API, вот так:

Authenticator.setDefault(new Authenticator(){
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("myuser","mypass".toCharArray());
    }});
HttpURLConnection c = (HttpURLConnection) new URL(url).openConnection();
c.setUseCaches(false);
c.connect();

очевидно, что ваш getPasswordAuthentication (), вероятно, должен сделать что-то более умное, чем возврат константы.

если вы пытаетесь сделать запрос с телом (например,POST) с аутентификацией, остерегайтесь Android выпуск 4326. Я связал предложенное исправьте платформу там, но есть простой обходной путь, если вы хотите только Basic auth: не беспокойтесь об Аутентификаторе, а вместо этого сделайте это:

c.setRequestProperty("Authorization", "basic " +
        Base64.encode("myuser:mypass".getBytes(), Base64.NO_WRAP));

для меня это сработало,

final String basicAuth = "Basic " + Base64.encodeToString("user:password".getBytes(), Base64.NO_WRAP);

Apache HttpCLient:

request.setHeader("Authorization", basicAuth);

HttpUrlConnection:

connection.setRequestProperty ("Authorization", basicAuth);

вы можете вручную вставить заголовок http для запроса:

HttpGet request = new HttpGet(...);
request.setHeader("Authorization", "Basic "+Base64.encodeBytes("login:password".getBytes()));

ручной метод хорошо работает с импортом android.утиль.В base64, но будьте уверены, чтобы установить в base64.NO_WRAP называть кодирование:

String basicAuth = "Basic " + new String(Base64.encode("user:pass".getBytes(),Base64.NO_WRAP ));
connection.setRequestProperty ("Authorization", basicAuth);

для моих проектов Android я использовал библиотеку Base64 отсюда:

http://iharder.net/base64

Это очень обширная библиотека, и до сих пор у меня не было никаких проблем с ней.

это работает для меня

 URL imageUrl = new URL(url);
                    HttpURLConnection conn = (HttpURLConnection) imageUrl
                            .openConnection();
                    conn.setRequestProperty("Authorization", "basic " +
                            Base64.encode("username:password".getBytes()));
                    conn.setConnectTimeout(30000);
                    conn.setReadTimeout(30000);
                    conn.setInstanceFollowRedirects(true);
                    InputStream is = conn.getInputStream();