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.netAPIs 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-androidals 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();