HttpURLConnection.usingProxy() 在连接前后
把 usingProxy 理解为处理器状态,包括 OpenJDK 25 在建立连接前的显式代理行为。
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 实现不必暴露相同的连接前细节。
记录代理是如何选定的,以及该标志是在何时读取的。要确定目标所看到的源地址,保留目标侧的证据;布尔型的代理标记没有字段可以承载那个出口地址。