Как дать Undici читать переменные окружения прокси
Осознанно используйте EnvHttpProxyAgent, различайте приоритет нижнего регистра, обходы, сохранённые URL прокси и динамический no_proxy.
Используйте 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 после работы; сохраняйте его, пока повторным запросам нужна та же зафиксированная политика точек.