Pergunta

Estou verificando a classe org.apache.http.auth. Mais alguma referência ou exemplo, se alguém tiver?

Foi útil?

Solução

Eu não conheci esse pacote em particular antes, mas diz que é para a autenticação HTTP do lado do cliente, o que pude fazer no Android usando o java.net APIs, assim:

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();

Obviamente, seu getPasswordAuthentication () provavelmente deve fazer algo mais inteligente do que retornar uma constante.

Se você está tentando fazer um pedido com um corpo (por exemplo POST) com autenticação, cuidado com Edição 4326 do Android. Eu vinculei uma correção sugerida à plataforma lá, mas há uma solução alternativa simples se você quiser apenas autenticação básica: não se preocupe com o autenticador e, em vez disso, faça isso:

c.setRequestProperty("Authorization", "basic " +
        Base64.encode("myuser:mypass".getBytes(), Base64.NO_WRAP));

Outras dicas

Para mim, funcionou,

final String basicAuth = "Basic " + Base64.encodeToString("user:password".getBytes(), Base64.NO_WRAP);

Apache httpClient:

request.setHeader("Authorization", basicAuth);

HttpurlConnection:

connection.setRequestProperty ("Authorization", basicAuth);

Você pode inserir manualmente o cabeçalho HTTP para solicitar:

HttpGet request = new HttpGet(...);
request.setHeader("Authorization", "Basic "+Base64.encodeBytes("login:password".getBytes()));

O método manual funciona bem com a importação Android.util.base64, mas certifique -se de definir base64.no_wrap na codificação de chamada:

String basicAuth = "Basic " + new String(Base64.encode("user:pass".getBytes(),Base64.NO_WRAP ));
connection.setRequestProperty ("Authorization", basicAuth);

Para meus projetos Android, usei a biblioteca Base64 a partir daqui:

http://iharder.net/base64

É uma biblioteca muito extensa e até agora não tive problemas com ela.

Isso funciona para mim

 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();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top