Ich überprüfe die Klasse org.apache.http.auth. Noch mehr Referenz oder Beispiel, wenn jemand hat?
android
http-authentication
Bohemien
quelle
quelle
Antworten:
Ich habe dieses spezielle Paket noch nicht kennengelernt, aber es heißt, es ist für die clientseitige HTTP-Authentifizierung gedacht, die ich unter Android mithilfe der
java.net
APIs durchführen konnte, wie folgt: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();
Offensichtlich sollte Ihre getPasswordAuthentication () wahrscheinlich etwas Intelligenteres tun, als eine Konstante zurückzugeben.
Wenn Sie versuchen, eine Anfrage mit einem Körper (z. B.
POST
) mit Authentifizierung zu stellen, achten Sie auf das Android-Problem 4326 . Ich habe dort einen Lösungsvorschlag mit der Plattform verknüpft, aber es gibt eine einfache Problemumgehung, wenn Sie nur die Standardauthentifizierung wünschen: Machen Sie sich keine Gedanken über Authenticator und tun Sie stattdessen Folgendes:c.setRequestProperty("Authorization", "basic " + Base64.encode("myuser:mypass".getBytes(), Base64.NO_WRAP));
quelle
android.util
. Ich habe es verwendet,ksoap2-android
als ich es gefunden habe, und sie haben eine Implementierung, die nur davon abhängtjava.io
, sodass Sie diese Klasse (natürlich vorbehaltlich ihrer Lizenz) einfachFür mich hat es funktioniert,
final String basicAuth = "Basic " + Base64.encodeToString("user:password".getBytes(), Base64.NO_WRAP);
Apache HttpCLient:
request.setHeader("Authorization", basicAuth);
HttpUrlConnection:
connection.setRequestProperty ("Authorization", basicAuth);
quelle
Sie können den http-Header manuell einfügen, um Folgendes anzufordern:
HttpGet request = new HttpGet(...); request.setHeader("Authorization", "Basic "+Base64.encodeBytes("login:password".getBytes()));
quelle
Die manuelle Methode funktioniert gut mit dem Import von android.util.Base64, aber stellen Sie sicher, dass Base64.NO_WRAP beim Aufrufen von encode festgelegt wird:
String basicAuth = "Basic " + new String(Base64.encode("user:pass".getBytes(),Base64.NO_WRAP )); connection.setRequestProperty ("Authorization", basicAuth);
quelle
Für meine Android-Projekte habe ich die Base64-Bibliothek von hier aus verwendet:
http://iharder.net/base64
Es ist eine sehr umfangreiche Bibliothek und bisher hatte ich keine Probleme damit.
quelle
Das funktioniert bei mir
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();
quelle