如何在 android 中进行 HTTP 认证?

我正在检查 org.apache.http.auth 类。 还有其他的参考或者例子吗?

126122 次浏览

我以前没有见过这个特殊的软件包,但是它说它是用于客户端 HTTP 身份验证的,我已经能够在 Android 上使用 java.net API 进行这种验证,如下所示:

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)发出请求,请小心 安卓系统4326期。我已经将一个建议的修复程序链接到了这个平台上,但是如果你只想要基本的认证,有一个简单的解决方案: 不要使用 Authenticator,而是这样做:

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

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

Http://iharder.net/base64

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

您可以手动将 http 头插入到请求:

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

手动方法在 import android.util. Base64中工作得很好,但是一定要在调用 encode 时设置 Base64.NO _ WRAP:

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

对我来说,成功了,

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

Apache HttpClient:

request.setHeader("Authorization", basicAuth);

HttpUrlConnection:

connection.setRequestProperty ("Authorization", basicAuth);

这对我有用

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