Java 使用Apache HTTPClient验证错误
我正试图通过经过身份验证的代理发出请求,如下所示Java 使用Apache HTTPClient验证错误,java,authentication,apache-httpcomponents,Java,Authentication,Apache Httpcomponents,我正试图通过经过身份验证的代理发出请求,如下所示 HttpHost proxy = new HttpHost("http-proxy", 80); CredentialsProvider credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials( user, passw
HttpHost proxy = new HttpHost("http-proxy", 80);
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(
user, password));
try (CloseableHttpClient client = HttpClientBuilder.create().setDefaultCredentialsProvider(credsProvider)
.build()) {
HttpPost post = new HttpPost(url);
RequestConfig config = RequestConfig.custom().setProxy(proxy).build();
post.setConfig(config);
post.setEntity(new UrlEncodedFormEntity(urlParameters));
HttpResponse response = client.execute(post);
return response;
}
我的问题是,它给了我以下的错误,我不太明白。我怀疑我可能没有使用正确的类来进行身份验证
WARNING: NEGOTIATE authentication error: No valid credentials provided (Mechanism level: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt))
WARNING: KERBEROS authentication error: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)
WARNING: NTLM authentication error: Credentials cannot be used for NTLM authentication: org.apache.http.auth.UsernamePasswordCredentials
MS代理服务器配置似乎有问题。您可以尝试基本身份验证,或者如果必须使用NTLM/Kerberos,请尝试进一步解决此问题。一般来说,我对HTTP身份验证了解不多,但这些消息意味着您的客户端不知道代理需要哪种身份验证,因此它会尝试SPNego(除其他外??),首先使用Kerberos,然后使用NTLM。而且两个都失败了。顺便问一下,为什么你要把代理当作一个普通的HTTP站点来处理呢??Java有一个特定的代理工具包,即
Proxy
和SocketFactory
等等。我记得在FTP和SFTP连接中使用了这些东西(使用Apache commons.net和SSHJ-都支持自定义SocketFactory
)。你是在建议我尝试使用现成的java.net api重写它吗?[耸耸肩]随你的便。但是我担心Apache示例在Apache toy代理和Apache toy web站点上工作得很好;现实世界有点复杂。顺便问一下,您是否简单地使用适当的代理参数和调试跟踪尝试了curl
,以查看它使用了哪种身份验证/头?我不确定我是否熟悉curl