如何使用AndroidHttpClient(API Level 8)和UsernamePasswordCredentials?

时间:2011-01-29 00:33:25

标签: android httpclient

目前我正在使用带有ThreadSafeClientConnManager的DefaultHttpClient。这很好用,但我想用AndroidHttpClient替换它。很遗憾,我无法添加对我来说很重要的UsernamePasswordCredentials。任何人都可以提供提示或解决方案吗?

3 个答案:

答案 0 :(得分:0)

您需要使用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);
            }
        }
    }    
};

答案 1 :(得分:0)

我知道这个问题很老但是为了任何绊脚石的人(就像我一样),你可以用HttpGet对象自己滚动标题。像这样:

httpGet.addHeader("Authorization", "Basic " + Base64.encode(username+":"+password));

答案 2 :(得分:0)

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