Comment faire l'authentification HTTP dans Android?
-
21-09-2019 - |
Question
Je vérifie la org.apache.http.auth de classe. Plus référence ou par exemple si quelqu'un a?
La solution
Je n'ai pas rencontré ce paquet particulier avant, mais il dit qu'il est pour l'authentification HTTP côté client, que je suis capable de faire sur Android en utilisant les API java.net
, comme ceci:
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();
Il est évident que votre getPasswordAuthentication () devrait probablement faire quelque chose de plus intelligent que le retour d'une constante.
Si vous essayez de faire une demande avec un corps (par exemple POST
) avec authentification, méfiez-vous de Android question 4326. J'ai lié une solution proposée à la plate-forme là-bas, mais il y a une solution simple si vous ne souhaitez auth de base: ne vous embêtez pas avec Authenticator, et au lieu faire ceci:
c.setRequestProperty("Authorization", "basic " +
Base64.encode("myuser:mypass".getBytes(), Base64.NO_WRAP));
Autres conseils
Pour moi, il a travaillé,
final String basicAuth = "Basic " + Base64.encodeToString("user:password".getBytes(), Base64.NO_WRAP);
Apache HttpClient:
request.setHeader("Authorization", basicAuth);
HttpURLConnection:
connection.setRequestProperty ("Authorization", basicAuth);
Vous pouvez insérer manuellement http tête à la demande:
HttpGet request = new HttpGet(...);
request.setHeader("Authorization", "Basic "+Base64.encodeBytes("login:password".getBytes()));
Méthode manuelle fonctionne bien avec android.util.Base64 à l'importation, mais assurez-vous de mettre Base64.NO_WRAP à appeler encode:
String basicAuth = "Basic " + new String(Base64.encode("user:pass".getBytes(),Base64.NO_WRAP ));
connection.setRequestProperty ("Authorization", basicAuth);
Pour mes projets Android J'ai utilisé la bibliothèque base64 d'ici:
Il est une bibliothèque très vaste et jusqu'à présent, je l'ai eu aucun problème avec elle.
Cela fonctionne pour moi
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();