Настройка мобильного прокси с помощью Node.js
Пошаговое руководство по настройке мобильного прокси в Node.js. Настройте axios, node-fetch, Puppeteer и Playwright с использованием выделенных IP-адресов операторов 4G/5G для обеспечения надежной автоматизации на JavaScript.
- Интеграция https-proxy-agent — перенаправление запросов Axios и нативных запросов fetch через HTTP-туннели с аутентификацией.
- Поддержка socks-proxy-agent — полная поддержка протокола SOCKS5 с удалённым разрешением DNS в современных средах выполнения Node.js.
- Аутентификация на странице Puppeteer — обработка запросов на ввод учетных данных прокси с помощью метода page.authenticate() или флагов среды выполнения Chrome.
- Изоляция контекста Playwright — назначение выделенных мобильных прокси для каждого контекста браузера, что обеспечивает работу с несколькими учетными записями без утечки данных.
Параметры прокси Node.js
В отличие от среды выполнения браузера или Python, Node.js изначально не считывает переменные среды HTTP_PROXY для встроенных HTTP-запросов. В современных бэкендах на JavaScript и TypeScript для маршрутизации исходящего трафика через прокси требуется настроить диспетчер Agent или передать сетевые параметры в высокоуровневые фреймворки для автоматизации работы с браузерами.
| Инструмент / Библиотека | Метод прокси | Обработка аутентификации | Вариант использования |
|---|---|---|---|
| axios | https-proxy-agent | Учетные данные URL в тексте | REST-API, бэкенд-микросервисы |
| fetch (Node 18+) | undici ProxyAgent | ProxyAgent: базовая аутентификация | Стандартные веб-API, бэкенды Next.js |
| Puppeteer | args + page.authenticate | Перехват события CDP | Автоматизация с использованием Headless Chrome |
| Playwright | Настройки контекстного прокси-сервера | Объект «Native Server» | Современные методы извлечения данных из браузеров и тестирование |
Настройка axios и node-fetch
При использовании axios разработчики часто пытаются передать базовый объект прокси { host, port, auth }. Хотя это работает для HTTP в открытом виде, при подключении к HTTPS-ресурсам это часто приводит к ошибкам сброса соединения. Стандартным решением в отрасли является установка https-proxy-agent или socks-proxy-agent для создания «чистых» HTTP CONNECT-туннелей.
import axios from 'axios';
import { HttpsProxyAgent } from 'https-proxy-agent';
// Define dedicated PXM2 mobile proxy endpoint
const proxyUrl = 'http://user123:secret456@proxy.pxm2.io:8000';
const httpsAgent = new HttpsProxyAgent(proxyUrl);
// Create reusable axios client instance
const client = axios.create({
httpsAgent,
timeout: 15000,
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
},
});
async function checkCarrierIp() {
try {
const response = await client.get('https://ipinfo.io/json');
console.log('Connected through mobile IP:', response.data.ip);
} catch (err) {
console.error('Proxy request failed:', err.message);
}
}
checkCarrierIp();
Для прокси SOCKS5 в Node.js установите пакет socks-proxy-agent и инициализируйте SocksProxyAgent('socks5h://user:pass@proxy.pxm2.io:1080'). Протокол socks5h обеспечивает удалённое разрешение DNS-имен без утечки данных на стороне клиента.
Настройка прокси-сервера Puppeteer
Puppeteer запускает внешний бинарный файл на основе Chromium. Поскольку Chrome не принимает встроенные учетные данные (имя пользователя и пароль) в аргументах командной строки, Puppeteer требует выполнения двухэтапного процесса: запуска браузера с параметром `--proxy-server` и вызова метода `page.authenticate()` для передачи учетных данных через протокол Chrome DevTools Protocol (CDP).
import puppeteer from 'puppeteer';
async function runBrowser() {
const browser = await puppeteer.launch({
headless: 'new',
args: [
// 1. Pass host and port to Chrome flags
'--proxy-server=http://proxy.pxm2.io:8000',
'--no-sandbox',
],
});
const page = await browser.newPage();
// 2. Intercept 407 authentication challenges
await page.authenticate({
username: 'user123',
password: 'secret456',
});
await page.goto('https://ipinfo.io', { waitUntil: 'domcontentloaded' });
const ip = await page.$eval('body', el => el.innerText);
console.log('Puppeteer IP verified:', ip);
await browser.close();
}
runBrowser();
Настройка прокси-сервера Playwright
Playwright обеспечивает более удобную работу с прокси, чем Puppeteer. Вместо того чтобы полагаться на перехват аутентификации CDP, Playwright позволяет настраивать параметры прокси на уровне контекста. Это дает возможность одновременно назначать разные мобильные прокси отдельным контекстам браузера в рамках одного экземпляра Chromium.
import { chromium } from 'playwright';
async function main() {
const browser = await chromium.launch({ headless: true });
// Create isolated context with dedicated mobile proxy
const context = await browser.newContext({
proxy: {
server: 'http://proxy.pxm2.io:8000',
username: 'user123',
password: 'secret456',
},
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36',
});
const page = await context.newPage();
await page.goto('https://api.ipify.org?format=json');
console.log(await page.textContent('body'));
await context.close();
await browser.close();
}
main();
Рекомендации по использованию прокси в Node.js
При масштабном запуске скрейперов и ботов на Node.js крайне важно обеспечить правильное использование пула соединений и соблюдение правил управления памятью:
-
1. Включить функцию Keep-Alive на прокси-агентахВсегда устанавливайте значение keepAlive: true в настройках HttpsProxyAgent. Повторное использование постоянных TCP-сокетов позволяет сократить задержку в мобильной сети на 100–250 мс при каждом последующем запросе.
-
2. Закрыть неактивные контекстыВ приложениях «Playwright» и «Puppeteer» никогда не оставляйте открытыми неиспользуемые контексты браузера или страницы. Оставленные контексты потребляют память и поддерживают открытые сокет-соединения с сотовым модемом.
-
3. Обработка задержек при повороте по требованиюПри запуске ротации IP-адресов через веб-хук PXM2 в Node.js необходимо обернуть вызов ротации в Promise, который будет выдерживать паузу в 6 секунд перед выполнением очереди запросов.
Великобритания
Испания
Индия
Часто задаваемые вопросы
Как использовать мобильный прокси с axios в Node.js?
В современной версии Axios используйте https-proxy-agent или socks-proxy-agent для создания объекта httpAgent или httpsAgent и передайте его экземпляру Axios. Это позволяет обойти проблемы, связанные с базовыми настройками прокси-объектов, и обеспечивает полную поддержку туннелирования CONNECT для HTTPS.
Как Playwright обрабатывает аутентификацию через прокси?
Playwright поддерживает аутентификацию через прокси непосредственно в браузере: `browser.newContext({ proxy: { server, username, password } })` или при запуске браузера. В отличие от Puppeteer, Playwright обрабатывает аутентификацию на уровне сетевого протокола, не требуя появления всплывающих окон на уровне страницы.
Можно ли использовать мобильные прокси с встроенным API fetch в Node.js?
Да. В Node.js версии 18 и более поздних глобальная функция `fetch` использует библиотеку Undici. Настроить прокси можно, передав пользовательский экземпляр Dispatcher из Undici (ProxyAgent) или задав стандартные переменные среды HTTP_PROXY с помощью undici-fetch.
Почему соединения WebSocket не работают через HTTP-прокси Node.js?
Для работы WebSockets требуется обновление HTTP до версии 101 (Switchings Protocols). При маршрутизации WebSockets через HTTP-прокси убедитесь, что ваш прокси-сервер поддерживает метод HTTP CONNECT, либо перейдите на SOCKS5-прокси, который туннелирует необработанные TCP-потоки без проверки заголовков полезных данных.
Как настроить ротацию IP-адресов мобильного прокси в скриптах Node.js?
При ротации через API отправьте HTTP-запрос GET на URL-адрес ротации PXM2. Сделайте небольшую паузу продолжительностью от 5 до 10 секунд, чтобы сотовый модем успел установить новое соединение с оператором, а затем, прежде чем продолжить, выполните проверку IP-адреса на сайте https://api.ipify.org.
Связанные руководства по мобильным прокси-серверам
Ознакомьтесь с соответствующими учебными материалами для разработчиков, информацией об интеграции с программистскими языками и руководствами по инфраструктуре мобильных прокси-серверов.
Руководства для разработчиков
Руководства по платформам и скрапингу
Ускорьте автоматизацию Node.js с помощью прокси-серверов Carrier
Специализированные мобильные модемы 4G/5G с неограниченным объемом данных, низкой задержкой и мгновенной сменой IP-адресов через API.
Получить мобильный прокси