HttpURLConnection 公开 usingProxy,但结果需要结合连接的具体实现与状态来读。它不是一次测试请求。

在 OpenJDK 25 的 HTTP 处理器中,显式配置的 HTTP 代理可以让该方法在打开网络连接之前就返回 true:

import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URI;

var proxy = new Proxy(Proxy.Type.HTTP,
    new InetSocketAddress("proxy.example", 8080));
var url = URI.create("http://example.com/").toURL();
var connection = (HttpURLConnection) url.openConnection(proxy);
boolean proxyFlag = connection.usingProxy();

来自 HTTP 代理列表的候选代理可以为允许的公开请求填入主机和端口,且无需代理认证。openConnection 只是构造对象。它并不会仅因返回该对象就建立 HTTP 连接。因此在这种显式代理的情形下,该标志并不能证明中间人可达或会接受请求。

在自动选择时,路由选择可能在处理器连接时才发生。早期的 false 结果不应被视为最终的路由决定。连接之后,应结合异常或响应来解读该状态,尤其在涉及认证或回退路径时。

这个公开方法属于 HttpURLConnection,而上述行为只针对所点名的 OpenJDK 处理器。其他提供方或 JDK 实现不必暴露相同的连接前细节。

记录代理是如何选定的,以及该标志是在何时读取的。要确定目标所看到的源地址,保留目标侧的证据;布尔型的代理标记没有字段可以承载那个出口地址。

相关文章