Frage

Ich überprüfe die Klasse org.apache.http.auth. Noch mehr Referenz oder Beispiel, wenn jemand hat?

War es hilfreich?

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:

http://iharder.net/base64

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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top