Интеграции · Начальный

Как использовать прокси в Node.js с fetch, undici, axios и got

В поддерживаемых версиях Node.js переменная NODE_USE_ENV_PROXY=1 включает HTTP_PROXY, HTTPS_PROXY и NO_PROXY для встроенного fetch; флаг --use-env-proxy доступен в Node.js 22.21+ и 24.5+. Альтернатива — явно настроить ProxyAgent или EnvHttpProxyAgent из undici. Библиотеки со своим транспортом или агентом требуют отдельной проверки: одна настройка не охватывает автоматически весь процесс.

3 минуты чтения 6 разделов Проверено Редакция Proxy Cyber

Встроенный fetch и undici#

Глобальная функция fetch в Node работает на базе undici. Передавайте ей ProxyAgent для каждого запроса через параметр dispatcher или один раз задайте его глобально с помощью setGlobalDispatcher.

undici
import { fetch, ProxyAgent, setGlobalDispatcher } from "undici";

const proxy = new ProxyAgent("http://USER-cc-us:PASS@res.proxy-cyber.com:9000");

// Для отдельного запроса
const res = await fetch("https://api.ipify.org", { dispatcher: proxy });
console.log(await res.text());

// Или глобально, для всех вызовов fetch в процессе
setGlobalDispatcher(proxy);

ProxyAgent объединяет соединения в пул, поэтому последовательные запросы могут повторно использовать одно соединение и, следовательно, один выходной узел. Чтобы получать новый выходной узел для каждого запроса, создайте агент с параметрами pipelining: 0 и connections: 1 или просто используйте разные значения -sid- для каждой логической сессии.

axios#

Собственный параметр proxy в axios не обеспечивает надёжное туннелирование HTTPS; стандартный подход — агент из https-proxy-agent и параметр proxy: false.

axios
import axios from "axios";
import { HttpsProxyAgent } from "https-proxy-agent";

const agent = new HttpsProxyAgent("http://USER-cc-de-city-berlin-sid-cart42-ttl-15m:PASS@res.proxy-cyber.com:9000");
const client = axios.create({ httpsAgent: agent, httpAgent: agent, proxy: false, timeout: 30000 });

const { data } = await client.get("https://api.ipify.org");
console.log(data);

got#

got
import got from "got";
import { HttpsProxyAgent } from "https-proxy-agent";

const agent = new HttpsProxyAgent("http://USER-cc-us:PASS@res.proxy-cyber.com:9000");
const body = await got("https://api.ipify.org", { agent: { https: agent, http: agent }, timeout: { request: 30000 } }).text();
console.log(body);

SOCKS5#

socks-proxy-agent
import fetch from "node-fetch";
import { SocksProxyAgent } from "socks-proxy-agent";

const agent = new SocksProxyAgent(process.env.PROXY_URL);
const response = await fetch("https://api.ipify.org", { agent });
console.log(await response.text());

Переменные окружения#

По умолчанию undici не читает HTTPS_PROXY. В последних версиях undici доступен EnvHttpProxyAgent, который поддерживает эту переменную; задайте его как глобальный диспетчер, и весь процесс, включая сторонние библиотеки на основе fetch, будет работать через прокси.

EnvHttpProxyAgent
import { EnvHttpProxyAgent, setGlobalDispatcher } from "undici";
// HTTPS_PROXY=http://USER-cc-us:PASS@res.proxy-cyber.com:9000 NO_PROXY=localhost node app.js
setGlobalDispatcher(new EnvHttpProxyAgent());

Параллельная работа и ротация IP#

  • Используйте один ProxyAgent для каждой закреплённой сессии (с отдельным значением -sid-) и передавайте его всем запросам этой сессии.
  • Для интенсивной ротации IP оставьте один агент, но отключите повторное использование соединений, либо запустите N агентов с N идентификаторами сессий и перебирайте их по кругу.
  • Отслеживайте ошибки UND_ERR_SOCKET и ECONNRESET: выходной узел резидентского прокси отключился; повторите запрос один раз, и следующее соединение выберет другой узел.

Частые вопросы#

Почему axios игнорирует мой прокси для HTTPS?

Встроенная поддержка прокси в axios ограничена при работе с туннелями CONNECT. Передайте https-proxy-agent как httpsAgent и задайте proxy: false, чтобы axios не пытался самостоятельно обрабатывать прокси.

Можно ли направлять через прокси только некоторые запросы?

Да. Передавайте диспетчер или агент только тем запросам, которым нужен прокси, а остальные оставьте без изменений; ничего не становится глобальным, пока вы не вызовете setGlobalDispatcher.

Ваш аккаунт

Управляйте прокси в одном кабинете

Сравнивайте сети, оформляйте заказы и проверяйте баланс и обращения в одном кабинете. Платежи проверяются вручную, а данные для подключения появляются после выдачи.

Создать аккаунт