java-使用httpclient 4.x验证单个请求

我有一个由多个线程共享的HttpClient实例.我想用它来发出一个经过身份验证的请求.因为仅应验证单个请求,所以我不想像documentation中所述那样修改HttpClient实例.这是我已经解决的问题,但是没有起作用.据我所知,它似乎根本没有使用CredentialsProvider.有小费吗?

HttpContext context = null;
if(feedSpec.isAuthenticated()) {
  context = new BasicHttpContext();
  CredentialsProvider credsProvider = new BasicCredentialsProvider();
  credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(feedSpec.getHttpUsername(), feedSpec.getHttpPassword()));
  context.setAttribute(ClientContext.CREDS_PROVIDER, credsProvider);
  context.setAttribute(ClientPNames.HANDLE_AUTHENTICATION, true);
}
HttpGet httpGet = new HttpGet(feedSpec.getUri());
HttpResponse httpResponse = httpClient.execute(httpGet, context);

解决方法:

原来我连接的服务器仅提供NTLM身份验证.我使用指南here实现了NTLM身份验证.我修改了问题中列出的代码,使其看起来像这样,并且可以正常工作:

HttpContext context = null;
if(feedSpec.isAuthenticated()) {
    context = new BasicHttpContext();
    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(AuthScope.ANY, new NTCredentials(feedSpec.getHttpUsername(), feedSpec.getHttpPassword(), "", ""));
    context.setAttribute(ClientContext.CREDS_PROVIDER, credsProvider);
}
HttpGet httpGet = new HttpGet(feedSpec.getUri());
HttpResponse httpResponse = httpClient.execute(httpGet, context);
上一篇:python-现代客户端/服务器身份验证技术


下一篇:对我来说合适的是:htAccess,表单提交,带有PHP的HTTP标头身份验证?