使用 HttpProxy 通过抢占式身份验证连接到主机

发布于 2024-11-01 09:20:10 字数 1092 浏览 4 评论 0原文

我正在使用 HttpClient 连接到需要 BasicAUTH 的主机。但代理不需要任何身份验证。我已将其设置如下:

private final HttpClient httpClient; // Spring injected

设置基本身份验证:

private void setBasicAuth(final String username, final String password) {
    httpClient.getState().setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM), new UsernamePasswordCredentials(username, password));
    httpClient.getParams().setAuthenticationPreemptive(true);
}

设置代理:

private void setProxy(final String proxyHost, final int proxyPort) {
    hostConfiguration hostConfiguration = httpClient.getHostConfiguration();
    hostConfiguration.setProxy(proxyHost, proxyPort);
}

但在运行代码时收到以下警告。一切正常,但我也想摆脱警告(或至少了解它们出现的原因)

WARN  o.a.c.httpclient.HttpMethodDirector - Required proxy credentials not available for BASIC <any realm>@proxy.XXXXXX.no:3128
WARN  o.a.c.httpclient.HttpMethodDirector - Preemptive authentication requested but no default proxy credentials available

有什么想法吗?

I am using HttpClient to connect to a host which requires BasicAUTH. But the proxy doesn't require any authentication. I have set it up as follows:

private final HttpClient httpClient; // Spring injected

Setting Basic auth:

private void setBasicAuth(final String username, final String password) {
    httpClient.getState().setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM), new UsernamePasswordCredentials(username, password));
    httpClient.getParams().setAuthenticationPreemptive(true);
}

Setting proxy:

private void setProxy(final String proxyHost, final int proxyPort) {
    hostConfiguration hostConfiguration = httpClient.getHostConfiguration();
    hostConfiguration.setProxy(proxyHost, proxyPort);
}

But I get the following warnings when running the code. Everything works, but I want to get rid of the warnings as well (or at least understand why they appears)

WARN  o.a.c.httpclient.HttpMethodDirector - Required proxy credentials not available for BASIC <any realm>@proxy.XXXXXX.no:3128
WARN  o.a.c.httpclient.HttpMethodDirector - Preemptive authentication requested but no default proxy credentials available

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我的影子我的梦 2024-11-08 09:20:10

以下是 Apache 站点上没有凭据的代理示例:

http://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientExecuteProxy.java

(来自<一个href="http://hc.apache.org/httpcomponents-client-ga/examples.html" rel="nofollow">http://hc.apache.org/httpcomponents-client-ga/examples.html)

您收到错误是因为您传递了用户名/密码,但不需要这样做。

警告消息来自记录器 (http://hc.apache.org/httpcomponents-client-ga/logging.html) - 取决于您如何设置记录器,您可以忽略那。

在花费了太多时间尝试让 Java 应用程序处理代理服务器之后,我可以告诉您,使用 Proxifier 等工具( http://www.proxifier.com/ 适用于 Mac OS X 和 Windows) 或 CNTLM ( http://cntlm.sourceforge.net/) 更容易、更灵活、更容易调试,并且保持代码干净。

Here's an example from the Apache site for a proxy w/o credentials:

http://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientExecuteProxy.java

(From http://hc.apache.org/httpcomponents-client-ga/examples.html)

You are getting the error because you are passing in a username/password and don't need to.

The WARN messages are coming from the logger (http://hc.apache.org/httpcomponents-client-ga/logging.html) - depending on how you have your logger set up you could just ignore that.

Having spent WAY too much time dealing with trying to make a Java application deal with proxy servers, I can tell you that using a tool such as Proxifier ( http://www.proxifier.com/ for Mac OS X and Windows) or CNTLM ( http://cntlm.sourceforge.net/) was much easier, more flexible, easier to debug, and kept the code clean.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文