Ich überprüfe die Klasse org.apache.http.auth. Noch mehr Referenz oder Beispiel, wenn jemand hat?
Ich überprüfe die Klasse org.apache.http.auth. Noch mehr Referenz oder Beispiel, wenn jemand hat?
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));
android.util
. Ich habe es verwendet, ksoap2-android
als ich es gefunden habe, und sie haben eine Implementierung, die nur davon abhängt java.io
, sodass Sie diese Klasse (natürlich vorbehaltlich ihrer Lizenz) einfach
Fü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);
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()));
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);
Für meine Android-Projekte habe ich die Base64-Bibliothek von hier aus verwendet:
Es ist eine sehr umfangreiche Bibliothek und bisher hatte ich keine Probleme damit.
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();