给由 Java 启动的 curl 进程传入代理变量
为下载器设置 ProcessBuilder.environment;JVM 的 -D 代理属性不会变成 curl 的选项。
在下载器的 ProcessBuilder 上设置它的输入:
var command = new ProcessBuilder(
"/usr/bin/curl", "--fail", "--max-time", "30",
"https://downloads.example/data.csv");
var environment = command.environment();
environment.put("http_proxy", "http://proxy.example:8080");
environment.put("https_proxy", "http://proxy.example:8080");
command.inheritIO();
Process child = command.start();环境映射最初是 Java 进程环境的副本。这些改动只对之后由这个 builder 启动的进程生效;它们不会更新父终端或另一个 builder。如果 curl 仍然直连,请检查继承下来的绕过变量。对于公开的 HTTP 下载路径,请从 HTTP 代理列表 中选择子进程的端点。
示例继承了标准流。请等待子进程结束、处理它的退出状态,并在 start() 之后保留应用程序的取消策略。
Java 的 http.proxyHost 系统属性属于参与其中的 Java 网络代码。Curl 使用自己的选项和环境。如果子进程是另一个 Java 程序,请在主类之前传入它需要的 -D 参数,或者传入 -jar;仅仅命名为 http.proxyHost 的环境变量并不会设置该属性。