【发布时间】:2016-11-11 07:02:02
【问题描述】:
我正在尝试设置要在我的应用程序中使用的代理。当我尝试将其设置为系统属性时:
Proxy proxy = ... // code to retrieve proxy from .pac file
InetSocketAddress addr = (InetSocketAddress) proxy.address();
System.setProperty("java.net.useSystemProxies", "true");
System.setProperty("http.proxyHost", addr.getHostName());
System.setProperty("http.proxyPort", Integer.toString(addr.getPort()));
当我尝试连接到 URL 时,它会抛出 java.net.ConnectException: Connection timed out: connect:
URL url = new URL(urlToConnect);
HttpsURLConnection httpsConnection = (HttpsURLConnection) url.openConnection(); // Exception thrown in this line
但是,如果我将代理设置为openConnection()的参数:
HttpsURLConnection httpsConnection = (HttpsURLConnection) url.openConnection(proxy);
我的代码可以正常工作并且我能够连接到 URL,但是这个解决方案是不切实际的,因为我的代码中有很多 openConnection()。
将其用作系统属性时如何使其工作?
【问题讨论】:
-
您是否尝试与抛出异常的相同 url 的浏览器建立连接?
-
是的..它工作正常@MSach
-
网址是http还是https?
-
根据docs:在最近的 Windows 系统和 Gnome 2.x 系统上,可以告诉 java.net 堆栈,将此属性设置为 true,以使用系统代理设置(这两个系统都允许您通过其用户界面全局设置代理)。请注意,此属性仅在启动时检查一次。 您使用的是 Windows 还是 Gnome 2.x?如果没有,听起来你不能使用该属性。如果是,请在命令行上设置属性,而不是在代码中。