Я проверяю класс org.apache.http.auth. Любая ссылка или пример, если у кого есть?
Как выполнить проверку подлинности HTTP в android?
Ответ 1
Я раньше не встречал этот пакет, но он говорит об этом для HTTP-аутентификации на стороне клиента, которую я смог сделать на Android с помощью API java.net
, например:
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: не беспокойтесь с Authenticator, а вместо этого сделайте следующее:
c.setRequestProperty("Authorization", "basic " +
Base64.encode("myuser:mypass".getBytes(), Base64.NO_WRAP));
Ответ 2
Для меня это сработало,
final String basicAuth = "Basic " + Base64.encodeToString("user:password".getBytes(), Base64.NO_WRAP);
Apache HttpCLient:
request.setHeader("Authorization", basicAuth);
HttpURLConnection:
connection.setRequestProperty ("Authorization", basicAuth);
Ответ 3
Вы можете вручную вставить HTTP-заголовок для запроса:
HttpGet request = new HttpGet(...);
request.setHeader("Authorization", "Basic "+Base64.encodeBytes("login:password".getBytes()));
Ответ 4
Ручной метод хорошо работает с импортом android.util.Base64, но не забудьте установить Base64.NO_WRAP при вызове encode:
String basicAuth = "Basic " + new String(Base64.encode("user:pass".getBytes(),Base64.NO_WRAP ));
connection.setRequestProperty ("Authorization", basicAuth);
Ответ 5
Для моих проектов Android я использовал библиотеку Base64 здесь:
Это очень обширная библиотека, и до сих пор у меня не было никаких проблем с ней.
Ответ 6
Это работает для меня
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();