gpt4 book ai didi

java - 系统代理设置检测失败

转载 作者:行者123 更新时间:2023-12-01 05:42:22 26 4
gpt4 key购买 nike

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

但是:我在目标站上运行一小段代码,并将其他任何内容(jar)存储在运行 apache Web 服务器的另一个站上。我从 main 中使用 URLClassloader 加载类,以便通过网络加载该代码段,它也负责代理检测。而且这样默认的代理选择器总是给DIRECT,它无法找到正确的设置。

我想,问题是我想设置

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

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

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

A)

Class.forname("a"); -> a is in the classpath
<小时/>

B)

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);
<小时/>

这两段代码都可以工作,唯一的不同在于输出。有人有什么想法吗?

提前致谢!!

佐米

最佳答案

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

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

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

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

问候,兹索米

关于java - 系统代理设置检测失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6781216/

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