0

我正在尝试连接到使用 SSL 的网站。此连接是通过代理 (squid) 进行的,该代理也需要代理身份验证。

我目前在我的应用程序中使用 HttpsUrlConnection 进行连接,如果可能的话,我更愿意继续使用它。

当您使用 connection.open(" https://domain.com ") 建立连接时会出现问题,HTTP CONNECT 在您有机会设置任何标头(包括“代理身份验证”)之前立即发送,在正常情况下http 连接在调用 getOutputStream 之前不会发送任何内容,因此只需设置此标头即可。

可以为此设置一个 defaultAuthenticator 以返回正确的名称和密码。但这有两个问题:

  1. 该应用程序是在 Web 服务器内运行的 Web 应用程序,具有未知的其他应用程序。如果我设置默认身份验证器,这会影响其他应用程序吗?(出于同样的原因,设置系统属性已退出)

  2. 我还需要能够在不同的连接中使用不同的代理。例如,我可能有一个连接到proxy1.domain.com 和另一个连接到proxy2.domain.com,每个都有不同的凭据。

实现这一目标的正确方法是什么?鉴于 HttpUrlConnection 的广泛使用,如果这不可能,我会感到非常惊讶。

4

2 回答 2

1

如果我没有完全弄错,这不能使用 JVMURLConnection和朋友来实现。此外,鉴于其在严重错误和内存泄漏方面的记录,它在我们的公司黑名单上已经有一段时间了。

使用Apache HttpClient

至于您的问题1,通常每个ClassLoader都有自己的类副本和类静态成员。因为,是一个 JVM 类,我假设它是由应用程序Authenticator的(其中一个)父级加载的,这确保JVM 内只有一个类的副本。ClassLoaderClassLoaderAuthenticator

于 2013-02-20T21:48:10.437 回答
0

你设置了一个java.net.Authenticator.

于 2013-02-20T23:22:47.717 回答