Java URLConnection:在不改动 URL 的前提下设置代理
不要把代理当作 Web 服务器来寻址,而应把路由作为独立的 Java 连接选项传入。
保留真实的资源 URL,并把代理单独传给 URLConnection:
URI destination = URI.create("https://example.com/report");
Proxy proxy = new Proxy(Proxy.Type.HTTP,
new InetSocketAddress("203.0.113.10", 8080));
URLConnection connection = destination.toURL().openConnection(proxy);
connection.setConnectTimeout(5000);
connection.setReadTimeout(10000);
使用 java.net 中的导入,并把文档里的代理地址替换成你的 HTTP 服务或 HTTP 代理列表中的候选。连接请求的仍然是 https://example.com/report;代理只是它的路由。此设置既不会配置凭据,也不会配置 JVM 中的每个 HTTP 库。
把代理替换进资源 URL 的错误代码可能拿到一个快速的代理网页或错误,而不是报告。在把这种快速响应理解为性能更好之前,先比较状态、内容和实际目的地。
openConnection(Proxy) 会把资源路径留在目标 URI 上。HTTPS 证书校验也应保留该主机名;把它换成中间人可能给路由错误再添上一个名称不匹配。
如果应用另行构造了其他 HTTP 客户端,就使用那个客户端或其连接工厂接口。URLConnection 的代理对象无法配置一条从不调用此 API 的路径。