gpt4 book ai didi

java - Java中读取系统代理

转载 作者:行者123 更新时间:2023-12-01 06:17:47 39 4
gpt4 key购买 nike

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

在 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。谢谢。

最佳答案

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()));
}
}
}

关于java - Java中读取系统代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19934147/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com