9

我正在开发一个发出 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_PROXYfalse. 但是,连接仍然成功,我的应用程序收到了它请求的数据。这怎么可能?是否有内置的东西,如果无法访问代理服务器,它只是再次尝试但在此重试时绕过代理?

第二个问题,我一直在尝试查找系统属性的完整列表。我发现了很多类似THIS的帖子,但没有一个列出http.proxyHosthttp.proxyPort,这让我觉得它们显然不是很完整。我是否以某种方式搜索错误?这些http.x属性是否属于这些其他列表?有没有更完整的清单?

4

1 回答 1

11

是否有内置的东西,如果无法访问代理服务器,它只是再次尝试但在此重试时绕过代理?

是的。

看到这个我很惊讶,但它在内部连接的来源: sun.net.www.protocol.http.HttpURLConnection。在第 760 行,如果我们尝试了所有可用的代理但连接失败,我们会尝试非代理连接。

我是否以某种方式搜索错误?

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

于 2013-03-08T17:10:07.903 回答