Java获取默认代理

时间:2013-05-13 03:34:37

标签: java http proxy

有没有办法在Java中获得“幕后”代理?使用http.proxyHosthttp.proxyPort指定的那个。

如果我这样做:

URL url = new URL("http://google.com");
HttpURLConnection con = (HttpURLConnection) url.openConnection();

它会自动连接上面设置的值。我还可以指定代理(HttpURLConnection con = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);)。但是如何指定默认代理?

例如,我有一个方法,并希望打开与“默认代理”的连接(如果Proxy.NO_PROXYhttp.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。

0 个答案:

没有答案