12/8/2024
How to use a proxy in a nodejs environment
#newsletter
There is an established standard by which proxies are configured. It runs via the following environment variables:
https_proxy: Proxy for https traffichttp_proxy: Proxy for http trafficno_proxy: URLs that should not run via a proxy.
https_proxy
http_proxy
no_proxy
The native fetch client of NodeJS does not offer any functionality for this out-of-the-box, but there is an agent from the undici http client that you can use:
fetch
undici
import { EnvHttpProxyAgent } from "undici";
const ENV_HTTP_PROXY_AGENT = new EnvHttpProxyAgent();
const proxyAgent = { dispatcher: ENV_HTTP_PROXY_AGENT };
await fetch("https://...", { ...proxyAgent, });
The node type definition does not support a dispatcher attribute for fetch, but it’s a supported logic. So if you’re using TypeScript you can ignore the error or use the beloved as any pattern for the proxy agent.
const proxyAgent = { dispatcher: ENV_HTTP_PROXY_AGENT } as any;
And that’s everything, no manual evaluation of the environment variables. Everything is handled by the EnvHttpProxyAgent from undici.
EnvHttpProxyAgent
undici