Java 如何使用httpclient 4.3进行身份验证

Java 如何使用httpclient 4.3进行身份验证,java,apache-httpclient-4.x,Java,Apache Httpclient 4.x,我刚刚升级到org.apache.httpcomponents.httpclient 4.3。之前,我创建了一个客户端,并进行了如下的抢占式身份验证: final HttpClient client = new DefaultHttpClient(); final HttpRequestBase request = new HttpGet(url); request.addHeader(BasicScheme.authenticate( new UsernamePasswordCredentia

我刚刚升级到org.apache.httpcomponents.httpclient 4.3。之前,我创建了一个客户端,并进行了如下的抢占式身份验证:

final HttpClient client = new DefaultHttpClient();
final HttpRequestBase request = new HttpGet(url);
request.addHeader(BasicScheme.authenticate( new UsernamePasswordCredentials(username,password), "UTF-8", false));
HttpClientBuilder clientBuilder = HttpClientBuilder.create();
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));

clientBuilder = clientBuilder.setDefaultCredentialsProvider(credentialsProvider);
现在这已不推荐使用,我必须创建一个客户端并进行如下身份验证:

final HttpClient client = new DefaultHttpClient();
final HttpRequestBase request = new HttpGet(url);
request.addHeader(BasicScheme.authenticate( new UsernamePasswordCredentials(username,password), "UTF-8", false));
HttpClientBuilder clientBuilder = HttpClientBuilder.create();
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));

clientBuilder = clientBuilder.setDefaultCredentialsProvider(credentialsProvider);
然而,我没有验证并成功获取,而是得到了302的响应。我认为这可以通过设置先发制人的身份验证来解决,但我找不到如何解决。也许第二个例子中的身份验证都错了


请给我一些建议好吗?

不清楚这是否真的是个问题


HTTP 302是一个重定向。您需要遵循重定向。

谢谢。我意识到这一点。对于以前的客户端代码,我不必遵循重定向,我希望获得相同的行为。@PaulGrenyer:HttpClient的所有4.x版本默认自动处理重定向。除非显式禁用重定向,否则无法获取GET的302状态。要么是细节不完整/不正确,要么就是有些东西非常不对劲。会话的wire日志将有助于找到大量可能的副本