1

我对系统代理检测有一些神秘的问题:实际上,我有正确的代码来在运行时检测系统代理设置,它也可以处理 pac 文件和 http 代理设置。当我在目标站上存储和执行所有内容时,它绝对正确。

但是:我在目标站上运行一小段代码,并将其他任何东西(罐子)存储在另一个站上,Apache 网络服务器在该站上运行。我主要从 URLClassloader 加载类,以便通过网络加载这段代码,它也负责代理检测。并且以这种方式,默认代理选择器始终提供 DIRECT,它无法找到正确的设置。

我想,问题是我想设置

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

在加载的类中,不知何故这不起作用......但是当我 sysout 属性值时,它是true.

我写了一个小测试程序,唯一的区别是:

一个)

Class.forname("a"); -> a is in the classpath

二)

URL[] url = new URL[1];
url[0] = new URL("http://1.2.3.4/dtfw");
URLClassloader u = new URLClassloader(url);
Class.forname("a", true, u);

这两段代码都有效,唯一不同的是输出。有人有什么想法吗?

提前致谢!!

佐米

4

1 回答 1

0

我找到了问题的根本原因:

DefaultProxySelector 每个 JVM 都是单例的,它的行为基于 if System.setProperty("java.net.useSystemProxies","true"); 设置与否。

当 URLClassloader 使用它时,该值在实例化时为 false。当我在“a”类中尝试使用它时,它无法找到系统代理设置,因为在实例化时没有设置这个属性。

所以我有原因,但还没有解决方案。

问候, 佐米

于 2011-07-22T10:58:47.527 回答