Java系统属性,http.proxyHost,两个问题

时间:2012-12-06 11:09:40

标签: java properties proxy system-properties

我正在开发一个发出HTTP请求的Java应用程序,而我的开发时间的一半是在代理之后。所以我的代码中有以下块:

if (BEHIND_PROXY) {
    java.util.Properties systemProperties = System.getProperties();
    systemProperties.setProperty("http.proxyHost", PROXY_HOST);
    systemProperties.setProperty("http.proxyPort", PROXY_PORT);
}

我的想法是根据我的位置更改BEHIND_PROXY的值。我今天工作,在代理后面,忘了将BEHIND_PROXY设置为false。但是,连接仍然成功,我的应用程序收到了它请求的数据。这怎么可能?是否内置了一些内容,如果无法访问代理服务器,它只是再次尝试但在此次重试时绕过代理?

还有第二个问题,我一直试图找到一个完整的系统属性列表。我发现了许多帖子,例如THIS一个,但其中没有一个列出http.proxyHosthttp.proxyPort,这让我觉得它们显然不是很完整。我不知何故错了?这些http.x属性是否属于这些其他列表?在某处有更完整的清单吗?

1 个答案:

答案 0 :(得分:11)

是否内置了一些内容,如果无法访问代理服务器,它只是再次尝试但在此次重试时绕过代理?

我很惊讶地看到这一点,但这里是内部连接的来源: sun.net.www.protocol.http.HttpURLConnection。在第760行,如果我们尝试了所有可用的代理并且无法连接,我们会尝试非代理连接。

我在某种程度上找错了吗?

也许。对或错,Java哲学似乎是系统属性是临时性的东西,知道它存在的唯一方法是阅读它所影响的事物的文档。在这种情况下,HttpURLConnection链接到Networking Properties上的页面。