有没有办法在Java中获得“幕后”代理?使用http.proxyHost
和http.proxyPort
指定的那个。
如果我这样做:
URL url = new URL("http://google.com");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
它会自动连接上面设置的值。我还可以指定代理(HttpURLConnection con = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
)。但是如何指定默认代理?
例如,我有一个方法,并希望打开与“默认代理”的连接(如果Proxy.NO_PROXY
和http.proxyHost
未设置,则与http.proxyPort
完全相同)?我可以用
(HttpURLConnection) ((proxy == null) ? url.openConnection() : url.openConnection(proxy))
但是要离开吗
(HttpURLConnection) url.openConnection(proxy == null ? [the default proxy] : proxy)
我尝试使用
获取默认代理public static Proxy getCurrentHTTPProxy(Proxy defaultProxy) {
String proxyHost = System.getProperty("http.proxyHost");
String proxyPort = System.getProperty("http.proxyPort");
if (proxyHost == null || proxyPort == null) {
return defaultProxy;
}
return new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, Integer.parseInt(proxyPort)));
}
但我仍然需要制作一个特例并检查https代理设置。 (如果URL为http,则调用getCurrentHTTPProxy,如果URL为https,则调用getCurrentHTTPSProxy)。我也查看了ProxySelector(就像这里How to get default proxy settings in java program (not applet)?),但这对于像这样的东西来说似乎太笨拙了。
最后,我尝试了查看openjdk的实现,如果传递的参数为null,那么它似乎会打开与默认代理的连接,但是当我在Sun JVM上尝试它时会产生NullPointerException。