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