Je vérifie la classe org.Apache.http.auth. Toute autre référence ou exemple si quelqu'un a?
Je n'ai jamais rencontré ce paquet particulier auparavant, mais il est indiqué que c'est pour l'authentification HTTP côté client, ce que j'ai pu faire sur Android en utilisant le Java.net
API, 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();
De toute évidence, votre getPasswordAuthentication () devrait probablement faire quelque chose de plus intelligent que de renvoyer une constante.
Si vous essayez de faire une demande avec un corps (par exemple, POST
) avec authentification, méfiez-vous de Android, numéro 4326 . J'ai lié un correctif suggéré à la plate-forme, mais il existe une solution de contournement simple si vous ne voulez que l'authentification de base: ne vous embêtez pas avec Authenticator, mais plutôt procédez comme suit:
c.setRequestProperty("Authorization", "basic " +
Base64.encode("myuser:mypass".getBytes(), Base64.NO_WRAP));
Pour moi, ça a marché,
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 un en-tête http pour demander:
HttpGet request = new HttpGet(...);
request.setHeader("Authorization", "Basic "+Base64.encodeBytes("login:password".getBytes()));
La méthode manuelle fonctionne bien avec l'importation Android.util.Base64, mais veillez à définir Base64.NO_WRAP lors de l'appel du code:
String basicAuth = "Basic " + new String(Base64.encode("user:pass".getBytes(),Base64.NO_WRAP ));
connection.setRequestProperty ("Authorization", basicAuth);
Pour mes Android projets, j’ai utilisé la bibliothèque Base64 à partir d’ici:
C'est une bibliothèque très vaste et jusqu'à présent, je n'ai eu aucun problème avec elle.
Ça marche 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();