Как сделать аутентификацию HTTP в android?
Я проверяю организацию класса.апаш.http.автор. Есть еще ссылки или примеры, если кто-то есть?
6 ответов
Я не встречал этот конкретный пакет раньше, но он говорит, что это для аутентификации HTTP на стороне клиента, которую я смог сделать на Android с помощью java.net
APIs, вот так:
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. Я связал предложение исправьте платформу там, но есть простой обходной путь, если вы хотите только базовую аутентификацию: не беспокойтесь об Аутентификаторе, а вместо этого сделайте это:
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 при вызове encode:
String basicAuth = "Basic " + new String(Base64.encode("user:pass".getBytes(),Base64.NO_WRAP ));
connection.setRequestProperty ("Authorization", basicAuth);
для моих проектов Android я использовал библиотеку 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();