HttpClient基本授权错误

时间:2017-02-14 14:01:35

标签: java authentication authorization basic-authentication apache-httpclient-4.x

我尝试使用4.3.6版本的org.apache.http.client.HttpClient执行REST API get请求,但收到401错误。我正在使用基本身份验证

这是我的示例代码

BasicCredentialsProvider credprov = new BasicCredentialsProvider();
credprov.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(API_USERNAME, API_PASSWORD));

HttpClientBuilder builder = HttpClientBuilder.create().setDefaultCredentialsProvider(credprov);
HttpClient client = builder.build();

HttpGet httpget = new HttpGet(API_TEST_URI);

HttpResponse response = httpClient.execute(httpget);
HttpEntity entity = response.getEntity();

System.out.println("----------------------------------------");
System.out.println(response.getStatusLine());
if (entity != null) {
    System.out.println("Response content length: " + entity.getContentLength());
}
if (entity != null) {
    entity.consumeContent();
}

httpClient.getConnectionManager().shutdown();

即使所有细节都正确,也会返回401。我正在通过HttpClient代码进行调试,发现原来的响应返回401,WWW-Authenticate标题只是设置为" Basic"没有别的。然后以MalformedChallengeException结束#34;身份验证挑战为空"异常。

我尝试过更改代码,使用基本身份验证

直接设置httpget变量的标头
httpget.addHeader("Authorization", "Basic " + Base64Encoder.encode ("username:password"));

这已经奏效(显示验证详细信息是正确的。

任何人都可以发现这种方法有什么问题,为什么它不起作用?

1 个答案:

答案 0 :(得分:0)

您似乎已添加了提供的凭据,但未添加AuthCache,这是预先进行身份验证所必需的。

HttpClient示例页面上列出了example of preemptive basic authenticationhttp://hc.apache.org/httpcomponents-client-ga/examples.html