我正在开发一个发出 HTTP 请求的 Java 应用程序,我一半的开发时间都花在了代理上。所以我的代码中有以下 block :
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
属性是否属于这些其他列表?有没有更完整的列表?
最佳答案
是否有内置的东西,如果无法访问代理服务器,它会再次尝试,但在这次重试时绕过代理?
是的。
我很惊讶看到这个,但它在内部连接的源代码中: sun.net.www.protocol.http.HttpURLConnection .在第 760 行,如果我们尝试了所有可用的代理但无法连接,我们将尝试非代理连接。
我是不是搜索错了?
也许吧。无论对错,Java 哲学似乎是系统属性是临时的东西,知道它存在的唯一方法是阅读它影响的东西的文档。在这种情况下,HttpURLConnection 链接到 Networking Properties 上的页面.
关于Java系统Properties,http.proxyHost,两个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13742350/