【发布时间】:2011-01-29 00:33:25
【问题描述】:
目前我正在使用带有 ThreadSafeClientConnManager 的 DefaultHttpClient。这很好用,但我想用 AndroidHttpClient 替换它。不幸的是,我无法添加当前对我很重要的 UsernamePasswordCredentials。任何人都可以提供提示或解决方案吗?
【问题讨论】:
标签: android httpclient
目前我正在使用带有 ThreadSafeClientConnManager 的 DefaultHttpClient。这很好用,但我想用 AndroidHttpClient 替换它。不幸的是,我无法添加当前对我很重要的 UsernamePasswordCredentials。任何人都可以提供提示或解决方案吗?
【问题讨论】:
标签: android httpclient
您需要使用HttpRequestInterceptor 类进行身份验证。
这是一个例子
HttpRequestInterceptor httpRequestInterceptor = new HttpRequestInterceptor() {
public void process(final HttpRequest request, final HttpContext context) throws HttpException, IOException {
AuthState authState = (AuthState) context.getAttribute(ClientContext.TARGET_AUTH_STATE);
CredentialsProvider credsProvider = (CredentialsProvider) context.getAttribute(
ClientContext.CREDS_PROVIDER);
HttpHost targetHost = (HttpHost) context.getAttribute(ExecutionContext.HTTP_TARGET_HOST);
if (authState.getAuthScheme() == null) {
AuthScope authScope = new AuthScope(targetHost.getHostName(), targetHost.getPort());
Credentials creds = credsProvider.getCredentials(authScope);
if (creds != null) {
authState.setAuthScheme(new BasicScheme());
authState.setCredentials(creds);
}
}
}
};
【讨论】:
AndroidHttpClient吗?
HttpClient
我知道这个问题已经过时了,但为了让遇到此问题的人受益(就像我所做的那样),您可以使用 HttpGet 对象自己滚动标题。像这样:
httpGet.addHeader("Authorization", "Basic " + Base64.encode(username+":"+password));
【讨论】:
对 Saad Farooq 的回答进行了一些改进,以下代码对我有用。
final AndroidHttpClient client = AndroidHttpClient.newInstance("Android");
getRequest = new HttpGet(url);
getRequest.addHeader("Authorization", "Basic " + Base64.encodeToString(new
String(username + ":" + password).getBytes(), Base64.NO_WRAP));
【讨论】: