1

有没有办法在 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_PROXYifhttp.proxyHosthttp.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 的实现,如果传递的参数为空,它似乎会打开与默认代理的连接,但是当我在 Sun JVM 上尝试它时,它会给出 NullPointerException。

4

0 回答 0