Используйте EnvHttpProxyAgent, если маршрут должно выбирать окружение процесса. Применяйте явный Undici ProxyAgent, если точка должна принадлежать конфигурации клиента. Передайте его реальному запросу: само создание агента не меняет ни один вызов fetch.

import { EnvHttpProxyAgent, fetch } from 'undici';

const dispatcher = new EnvHttpProxyAgent();

try {
  const response = await fetch("https://example.com/", {
    dispatcher,
    signal: AbortSignal.timeout(15000),
  });
  console.log(response.status);
  await response.arrayBuffer();
} finally {
  await dispatcher.close();
}

Сохраните код как proxy-check.mjs в среде ES-модулей с доступным Undici. Такой запуск в POSIX задаёт два маршрута прокси и пустой список обходов:

http_proxy=http://203.0.113.10:8080 \
https_proxy=http://203.0.113.10:8080 \
no_proxy= \
node proxy-check.mjs

Замените документационную точку своим HTTP-прокси или кандидатом из списка HTTP-прокси. Присваивания относятся к этому запуску; другие оболочки используют другой синтаксис.

В Undici 8.12.3 переменные в нижнем регистре http_proxy, https_proxy и no_proxy имеют приоритет над аналогами в верхнем, если существуют обе формы. HTTP- и HTTPS-назначения выбирают собственные настройки. Настройка только HTTP также даёт запасной вариант для HTTPS; настройка только HTTPS не обеспечивает HTTP. Не предполагайте, что действует соглашение ALL_PROXY другого клиента.

Входные данныеКогда эта версия их использует
Окружение прокси HTTP/HTTPSВыбирается при создании агента. После изменения этих точек создайте новый dispatcher.
no_proxy из окруженияПроверяется заново при отправке запросов.
noProxy конструктораЯвно фиксирует политику обхода, не следуя последующим изменениям окружения.

Обходы могут сопоставляться с хостами и необязательными портами; одна звёздочка обходит прокси для всех запросов. Если прокси не видит трафика, проверьте совпадение назначения.

В Windows главный процесс не учитывает регистр имён окружения, поэтому HTTP_PROXY и http_proxy — не независимые значения. У копий окружения Node Worker есть документированное различие с учётом регистра. Учтите это, прежде чем задавать оба написания для проверки приоритета. Пример закрывает dispatcher после работы; сохраняйте его, пока повторным запросам нужна та же зафиксированная политика точек.

Похожие статьи