用Java读取系统代理

时间:2013-11-12 16:09:23

标签: java proxy

令人惊讶的是,我无法为这样一个微不足道的问题找到一个可行的解决方案。

在Java servlet中我需要连接到外部网站,而在doGet方法中我正在使用

URL website = new URL(websiteUrl);

为此。

此代码在我的PC上运行,但在生产Linux应用程序服务器上运行时无法连接。

我检查了服务器上的Firefox网络设置,并将其设置为使用系统代理。 在Linux终端中使用echo $http_proxy命令,我读取代理设置并将我的代码更改为:

URL website = new URL("http", proxy, Integer.parseInt(proxyPort), websiteUrl);

将代理设置设置为硬编码。

现在它可以工作,但显然我不想对代理设置进行硬编码,而是动态地读取它。

这是我偶然发现的地方,因为我在互联网上找到的所有方法都不适合我。

System.getProperty("http.proxyHost")
System.getProperty("http_proxy")

ProxySelector methods或添加

System.setProperty("java.net.useSystemProxies", "true");

没有结果。

有没有可行的解决方案? 知道为什么那些常见的解决方案在我的情况下不起作用吗?

我在RHEL 6上运行WebLogic 10.3.5 / JRockit。 感谢。

2 个答案:

答案 0 :(得分:0)

System.setProperty("java.net.useSystemProxies", "true");
System.out.println("detecting proxies");
List l = null;
try {
    l = ProxySelector.getDefault().select(new URI("http://foo/bar"));
} 
catch (URISyntaxException e) {
    e.printStackTrace();
}
if (l != null) {
    for (Iterator iter = l.iterator(); iter.hasNext();) {
        java.net.Proxy proxy = (java.net.Proxy) iter.next();
        System.out.println("proxy hostname : " + proxy.type());

        InetSocketAddress addr = (InetSocketAddress) proxy.address();

        if (addr == null) {
            System.out.println("No Proxy");
        } else {
            System.out.println("proxy hostname : " + addr.getHostName());
            System.setProperty("http.proxyHost", addr.getHostName());
            System.out.println("proxy port : " + addr.getPort());
            System.setProperty("http.proxyPort", Integer.toString(addr.getPort()));
        }
    }
}

答案 1 :(得分:-1)

您可能没有系统范围的defiend代理,但Firefox在其设置中配置了一个。因此代理检测代码正确地指出:没有代理。