Multi Auth方法Apache http客户端4.3+

时间:2014-04-10 12:12:18

标签: android apache-httpclient-4.x apache-commons-httpclient

我有几台具有不同Auth类型的服务器。基础,NTLM。我需要机制来自动选择它。我看到尝试使用每种凭据类型,并选择成功。我在http客户端4.3中找到了一些方法,命名为impl.client.HttpClientBuilder #setDefaultAuthSchemeRegistry,但是

  1. 我不知道如何使用它。
  2. 第二个问题,我如何控制auth方法的优先级。因为我想确定我应该使用哪个url方法,然后想在上次请求时从成功的方法开始。
  3. PS至于现在我对每种类型的auth都有可行的实现。

1 个答案:

答案 0 :(得分:1)

可以使用RequestConfig

在每个请求的基础上配置首选身份验证方案
RequestConfig requestConfig =  RequestConfig.custom()
        .setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC))
        .setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.DIGEST))
        .build();

本地执行上下文包含与请求执行有关的所有详细信息,包括目标和代理主机的身份验证状态

CloseableHttpClient httpclient = HttpClients.createDefault();
try {
    HttpClientContext localContext = HttpClientContext.create();
    HttpGet httpget = new HttpGet("http://localhost/");
    CloseableHttpResponse response = httpclient.execute(httpget, localContext);
    try {
        System.out.println(response.getStatusLine());
        EntityUtils.consume(response.getEntity());
        AuthState targetAuthState = localContext.getTargetAuthState();
        if (targetAuthState.getAuthScheme() != null) {
            System.out.println("Target auth scheme: " +
                    targetAuthState.getAuthScheme().getSchemeName());
        }
        AuthState proxyAuthState = localContext.getProxyAuthState();
        if (proxyAuthState.getAuthScheme() != null) {
            System.out.println("Proxy auth scheme: " +
                    proxyAuthState.getAuthScheme().getSchemeName());
        }

    } finally {
        response.close();
    }
} finally {
    httpclient.close();
}