我正在查看 org.apache.http.auth 这个类。如果有更多的参考或示例,请提供。
我正在查看 org.apache.http.auth 这个类。如果有更多的参考或示例,请提供。
对我来说,它起作用了,
final String basicAuth = "Basic " + Base64.encodeToString("user:password".getBytes(), Base64.NO_WRAP);
Apache HttpClient:
request.setHeader("Authorization", basicAuth);
HttpUrlConnection:
connection.setRequestProperty ("Authorization", basicAuth);
我之前没有遇到过那个特定的包,但是它说它是用于客户端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
)的请求,请注意Android问题4326。在那里,我已经链接了对平台的建议修复措施,但是如果你只需要基本认证,有一个简单的解决方法:不要使用Authenticator,而是这样做:
c.setRequestProperty("Authorization", "basic " +
Base64.encode("myuser:mypass".getBytes(), Base64.NO_WRAP));
您可以手动插入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);
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();