From c0108bfc55032d06ed0e9fe2802b437603b80a7d Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Wed, 10 Dec 2025 17:12:28 +0100 Subject: [PATCH] http: add http.setGlobalProxyFromEnv() This adds an API to dynamically enable built-in proxy support for all of fetch() and http.request()/https.request(), so that users do not have to be aware of them all and configure them one by one. PR-URL: https://github.com/nodejs/node/pull/60953 Reviewed-By: Matteo Collina Reviewed-By: Tim Perry --- doc/api/http.md | 110 ++++++++++++++++++ lib/_http_agent.js | 8 +- lib/http.js | 61 +++++++++- lib/https.js | 8 +- lib/internal/http.js | 29 ++++- test/client-proxy/test-http-proxy-fetch.mjs | 4 +- ...et-global-proxy-from-env-fetch-default.mjs | 35 ++++++ ...-set-global-proxy-from-env-fetch-empty.mjs | 21 ++++ ...-set-global-proxy-from-env-fetch-https.mjs | 38 ++++++ ...t-global-proxy-from-env-fetch-no-proxy.mjs | 23 ++++ ...et-global-proxy-from-env-fetch-restore.mjs | 35 ++++++ ...t-http-set-global-proxy-from-env-fetch.mjs | 34 ++++++ ...al-proxy-from-env-http-request-default.mjs | 33 ++++++ ...obal-proxy-from-env-http-request-empty.mjs | 20 ++++ ...al-proxy-from-env-http-request-restore.mjs | 33 ++++++ ...set-global-proxy-from-env-http-request.mjs | 29 +++++ ...et-global-proxy-from-env-https-request.mjs | 37 ++++++ ...set-global-proxy-from-env-invalid-type.mjs | 15 +++ ...-set-global-proxy-from-env-invalid-url.mjs | 21 ++++ ...ttp-set-global-proxy-from-env-no-proxy.mjs | 23 ++++ ...t-global-proxy-from-env-override-fetch.mjs | 44 +++++++ ...et-global-proxy-from-env-override-http.mjs | 40 +++++++ test/common/proxy-server.js | 74 +++++++++++- test/fixtures/fetch-and-log.mjs | 17 +++ test/fixtures/request-and-log.js | 59 +++++++--- 25 files changed, 807 insertions(+), 44 deletions(-) create mode 100644 test/client-proxy/test-http-set-global-proxy-from-env-fetch-default.mjs create mode 100644 test/client-proxy/test-http-set-global-proxy-from-env-fetch-empty.mjs create mode 100644 test/client-proxy/test-http-set-global-proxy-from-env-fetch-https.mjs create mode 100644 test/client-proxy/test-http-set-global-proxy-from-env-fetch-no-proxy.mjs create mode 100644 test/client-proxy/test-http-set-global-proxy-from-env-fetch-restore.mjs create mode 100644 test/client-proxy/test-http-set-global-proxy-from-env-fetch.mjs create mode 100644 test/client-proxy/test-http-set-global-proxy-from-env-http-request-default.mjs create mode 100644 test/client-proxy/test-http-set-global-proxy-from-env-http-request-empty.mjs create mode 100644 test/client-proxy/test-http-set-global-proxy-from-env-http-request-restore.mjs create mode 100644 test/client-proxy/test-http-set-global-proxy-from-env-http-request.mjs create mode 100644 test/client-proxy/test-http-set-global-proxy-from-env-https-request.mjs create mode 100644 test/client-proxy/test-http-set-global-proxy-from-env-invalid-type.mjs create mode 100644 test/client-proxy/test-http-set-global-proxy-from-env-invalid-url.mjs create mode 100644 test/client-proxy/test-http-set-global-proxy-from-env-no-proxy.mjs create mode 100644 test/client-proxy/test-http-set-global-proxy-from-env-override-fetch.mjs create mode 100644 test/client-proxy/test-http-set-global-proxy-from-env-override-http.mjs diff --git a/doc/api/http.md b/doc/api/http.md index 77dd231ebb..b5d89ac203 100644 --- a/doc/api/http.md +++ b/doc/api/http.md @@ -4361,6 +4361,32 @@ added: Set the maximum number of idle HTTP parsers. +## `http.setGlobalProxyFromEnv([proxyEnv])` + + + +* `proxyEnv` {Object} An object containing proxy configuration. This accepts the + same options as the `proxyEnv` option accepted by [`Agent`][]. **Default:** + `process.env`. +* Returns: {Function} A function that restores the original agent and dispatcher + settings to the state before this `http.setGlobalProxyFromEnv()` is invoked. + +Dynamically resets the global configurations to enable built-in proxy support for +`fetch()` and `http.request()`/`https.request()` at runtime, as an alternative +to using the `--use-env-proxy` flag or `NODE_USE_ENV_PROXY` environment variable. +It can also be used to override settings configured from the environment variables. + +As this function resets the global configurations, any previously configured +`http.globalAgent`, `https.globalAgent` or undici global dispatcher would be +overridden after this function is invoked. It's recommended to invoke it before any +requests are made and avoid invoking it in the middle of any requests. + +See [Built-in Proxy Support][] for details on proxy URL formats and `NO_PROXY` +syntax. + ## Class: `WebSocket`