73

我正在检查类 org.apache.http.auth。如果有人有,还有更多参考或示例吗?

4

6 回答 6

118

对我来说,它奏效了,

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

Apache HttpCLient:

request.setHeader("Authorization", basicAuth);

HttpUrl连接:

connection.setRequestProperty ("Authorization", basicAuth);
于 2012-02-21T12:24:11.517 回答
80

我以前没有遇到过那个特定的包,但它说它是用于客户端 HTTP 身份验证的,我已经能够使用java.netAPI 在 Android 上执行此操作,如下所示:

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

显然,您的 getPasswordAuthentication() 可能应该做一些比返回常量更智能的事情。

如果您尝试使用POST带有身份验证的正文(例如)发出请求,请注意Android 问题 4326。我已经将建议的修复链接到那里的平台,但是如果您只想要基本身份验证,有一个简单的解决方法:不要打扰 Authenticator,而是这样做:

c.setRequestProperty("Authorization", "basic " +
        Base64.encode("myuser:mypass".getBytes(), Base64.NO_WRAP));
于 2009-12-28T10:39:01.783 回答
14

您可以手动插入 http 标头来请求:

HttpGet request = new HttpGet(...);
request.setHeader("Authorization", "Basic "+Base64.encodeBytes("login:password".getBytes()));
于 2011-03-15T19:24:28.583 回答
13

手动方法适用于 import android.util.Base64,但请务必在调用编码时设置 Base64.NO_WRAP:

String basicAuth = "Basic " + new String(Base64.encode("user:pass".getBytes(),Base64.NO_WRAP ));
connection.setRequestProperty ("Authorization", basicAuth);
于 2012-01-08T17:37:32.593 回答
3

对于我的 Android 项目,我从这里使用了 Base64 库:

http://iharder.net/base64

这是一个非常广泛的图书馆,到目前为止我没有遇到任何问题。

于 2010-06-04T11:34:12.943 回答
1

这对我有用

 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();
于 2014-06-24T07:46:23.437 回答