8 个月前,我使用这个堆栈溢出帖子在 Java 项目中自动使用代理服务器。它工作得很好。
这是我当时想出的代码:
System.setProperty("java.net.useSystemProxies", "true");
List<Proxy> proxyServers = null;
try {
proxyServers = ProxySelector.getDefault().select(new URI("http://www.twitter.com"));
} catch (URISyntaxException e) {
System.out.println("Error using system proxy");
}
if (proxyServers != null) {
for (Iterator<Proxy> iter = proxyServers.iterator(); iter.hasNext();) {
Proxy proxy = iter.next();
System.out.println("Found Proxy: " + proxy);
InetSocketAddress addr = (InetSocketAddress) proxy.address();
if (addr == null) {
System.out.println("No Proxy");
} else {
System.setProperty("http.proxyHost", addr.getHostName());
System.setProperty("http.proxyPort", Integer.toString(addr.getPort()));
System.out.println("proxy hostname : " + addr.getHostName());
System.out.println("proxy port : " + addr.getPort());
}
}
}
我最近尝试将完全相同的代码添加到另一个项目中,但得到了不同的结果。我将计算机设置为使用测试代理服务器并运行两个项目来比较结果。如果我从 8 个月前运行该项目,则会打印出以下内容:
Found Proxy: HTTP @ 192.168.1.100:8000
proxy hostname : 192.168.1.100
proxy port : 8000
如果我在设置了相同代理服务器的同一台机器上运行我当前的项目,则会打印出以下内容。
Found Proxy: DIRECT
No Proxy
找到的唯一代理是“直接”并且 proxy.address() 为空。
什么会导致在一种情况下找到代理设置但在另一种情况下找不到?
编辑:
我通过在启动过程中更快地移动代码来解决这个问题,但我不知道为什么会修复它。