Wie mache ich die HTTP -Authentifizierung in Android?
-
21-09-2019 - |
Frage
Ich überprüfe die Klasse org.apache.http.auth. Noch mehr Referenz oder Beispiel, wenn jemand hat?
Lösung
Ich habe dieses bestimmte Paket zuvor noch nicht getroffen, aber es heißt für die clientseitige HTTP-Authentifizierung, die ich auf Android mit dem tun konnte java.net
APIs wie SO:
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 Ihr GetPasswordAuthentication () wahrscheinlich etwas intelligenteres tun, als eine Konstante zurückzugeben.
Wenn Sie versuchen, eine Anfrage mit einem Körper zu stellen (z. B. POST
) Mit der Authentifizierung achten Sie darauf vor Android Ausgabe 4326. Ich habe eine vorgeschlagene Fix mit der Plattform dort verknüpft, aber es gibt eine einfache Problemumgehung, wenn Sie nur grundlegende Auth: Machen Sie sich nicht mit Authenticator und tun Sie dies stattdessen:
c.setRequestProperty("Authorization", "basic " +
Base64.encode("myuser:mypass".getBytes(), Base64.NO_WRAP));
Andere Tipps
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 zu fordern:
HttpGet request = new HttpGet(...);
request.setHeader("Authorization", "Basic "+Base64.encodeBytes("login:password".getBytes()));
Die manuelle Methode funktioniert gut mit Android.util.base64, setze aber unbedingt Base64.NO_WRAP beim Aufrufen von CODE:
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 für mich
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();