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