我正在开发一个发出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.proxyHost
或http.proxyPort
,这让我觉得它们显然不是很完整。我不知何故错了?这些http.x
属性是否属于这些其他列表?在某处有更完整的清单吗?
答案 0 :(得分:11)
是
我很惊讶地看到这一点,但这里是内部连接的来源: sun.net.www.protocol.http.HttpURLConnection。在第760行,如果我们尝试了所有可用的代理并且无法连接,我们会尝试非代理连接。
也许。对或错,Java哲学似乎是系统属性是临时性的东西,知道它存在的唯一方法是阅读它所影响的事物的文档。在这种情况下,HttpURLConnection链接到Networking Properties上的页面。