HTTP прокси — это промежуточный сервер, который принимает HTTP-запросы от клиента и перенаправляет их к целевому серверу. При этом целевой сервер видит IP-адрес прокси, а не ваш реальный адрес. Использование прокси в Node.js позволяет обходить географические ограничения, повышать анонимность и тестировать веб-приложения из разных регионов. Эта статья демонстрирует, как интегрировать прокси с популярными HTTP-клиентами и браузерными движками: axios, puppeteer и playwright.
Использование прокси с Axios
Axios — это популярный HTTP-клиент для Node.js, основанный на Promise API. Настроить прокси с Axios довольно просто, используя опцию proxy в конфигурации запроса.
Настройка прокси
Для использования прокси с Axios необходимо указать его адрес и порт в конфигурации запроса. Можно также добавить логин и пароль, если прокси требует аутентификацию.
const axios = require('axios');
async function fetchDataWithProxy() {
try {
const response = await axios.get('https://api.ipify.org?format=json', {
proxy: {
host: 'your_proxy_host', // Замените на IP-адрес или доменное имя прокси-сервера
port: 8080, // Замените на порт прокси-сервера
auth: { // Необязательно: если прокси требует аутентификацию
username: 'your_username',
password: 'your_password'
}
}
});
console.log(response.data);
} catch (error) {
console.error('Ошибка при запросе:', error);
}
}
fetchDataWithProxy();
В этом примере https://api.ipify.org?format=json используется для получения IP-адреса, с которого был сделан запрос. Если прокси настроен правильно, вы увидите IP-адрес прокси-сервера, а не ваш.
Типы прокси
Axios поддерживает различные типы прокси, такие как HTTP, HTTPS и SOCKS. Тип прокси определяется схемой в адресе прокси.
- HTTP:
http://your_proxy_host:8080 - HTTPS:
https://your_proxy_host:8080 - SOCKS4/5:
socks4://your_proxy_host:1080илиsocks5://your_proxy_host:1080
Для SOCKS прокси может потребоваться установка дополнительного пакета, например socks-proxy-agent.
const axios = require('axios');
const SocksProxyAgent = require('socks-proxy-agent');
async function fetchDataWithSocksProxy() {
try {
const agent = new SocksProxyAgent({
host: 'your_proxy_host',
port: 1080,
userId: 'your_username', // Необязательно
password: 'your_password' // Необязательно
});
const response = await axios.get('https://api.ipify.org?format=json', {
httpsAgent: agent, // Для HTTPS запросов
httpAgent: agent, // Для HTTP запросов
});
console.log(response.data);
} catch (error) {
console.error('Ошибка при запросе:', error);
}
}
fetchDataWithSocksProxy();
Глобальная настройка прокси для Axios
Вместо указания прокси для каждого запроса, можно настроить глобальный прокси для экземпляра Axios.
const axios = require('axios');
const instance = axios.create({
proxy: {
host: 'your_proxy_host',
port: 8080,
auth: {
username: 'your_username',
password: 'your_password'
}
}
});
async function fetchData() {
try {
const response = await instance.get('https://api.ipify.org?format=json');
console.log(response.data);
} catch (error) {
console.error('Ошибка при запросе:', error);
}
}
fetchData();
Использование прокси с Puppeteer
Puppeteer — это Node.js библиотека, предоставляющая API для управления браузером Chrome или Chromium. Использование прокси с Puppeteer позволяет эмулировать действия пользователей из разных географических локаций.
Запуск браузера с прокси
Прокси указывается при запуске браузера через аргументы командной строки --proxy-server.
const puppeteer = require('puppeteer');
async function runPuppeteerWithProxy() {
const browser = await puppeteer.launch({
args: [
'--proxy-server=your_proxy_host:8080' // Замените на адрес и порт прокси-сервера
]
});
const page = await browser.newPage();
await page.goto('https://api.ipify.org');
const ipAddress = await page.$eval('body', el => el.textContent);
console.log('IP Address:', ipAddress);
await browser.close();
}
runPuppeteerWithProxy();
Использование аутентифицированного прокси
Для использования прокси с аутентификацией необходимо использовать page.authenticate().
const puppeteer = require('puppeteer');
async function runPuppeteerWithAuthProxy() {
const browser = await puppeteer.launch({
args: [
'--proxy-server=your_proxy_host:8080' // Замените на адрес и порт прокси-сервера
]
});
const page = await browser.newPage();
await page.authenticate({
username: 'your_username',
password: 'your_password'
});
await page.goto('https://api.ipify.org');
const ipAddress = await page.$eval('body', el => el.textContent);
console.log('IP Address:', ipAddress);
await browser.close();
}
runPuppeteerWithAuthProxy();
SOCKS прокси с Puppeteer
Puppeteer поддерживает только HTTP(S) прокси через аргументы командной строки. Для использования SOCKS прокси потребуется дополнительная настройка, например, использование SSH-туннеля или другой библиотеки, которая преобразует SOCKS прокси в HTTP прокси.
Использование прокси с Playwright
Playwright — это библиотека для автоматизации браузеров, разработанная Microsoft. Она поддерживает Chrome, Firefox, Safari и Edge. Настройка прокси с Playwright аналогична Puppeteer, но имеет некоторые отличия.
Запуск браузера с прокси
Прокси указывается через опцию proxy при запуске браузера.
const { chromium } = require('playwright');
async function runPlaywrightWithProxy() {
const browser = await chromium.launch({
proxy: {
server: 'your_proxy_host:8080', // Замените на адрес и порт прокси-сервера
username: 'your_username', // Необязательно
password: 'your_password' // Необязательно
}
});
const page = await browser.newPage();
await page.goto('https://api.ipify.org');
const ipAddress = await page.textContent('body');
console.log('IP Address:', ipAddress);
await browser.close();
}
runPlaywrightWithProxy();
Типы прокси с Playwright
Playwright поддерживает HTTP(S) и SOCKS прокси. Тип прокси определяется схемой в адресе прокси.
- HTTP:
http://your_proxy_host:8080 - HTTPS:
https://your_proxy_host:8080 - SOCKS4/5:
socks4://your_proxy_host:1080илиsocks5://your_proxy_host:1080
Сравнение библиотек: Axios, Puppeteer, Playwright
| Feature | Axios | Puppeteer | Playwright |
|---|---|---|---|
| Типы прокси | HTTP, HTTPS, SOCKS | HTTP, HTTPS | HTTP, HTTPS, SOCKS |
| Простота настройки | Высокая | Средняя | Средняя |
| Браузерный движок | Нет | Chrome/Chromium | Chrome/Chromium, Firefox, Safari, Edge |
| Автоматизация | Только HTTP запросы | Полная автоматизация браузера | Полная автоматизация браузера |
Заключение
Использование прокси в Node.js с axios, puppeteer и playwright позволяет решать различные задачи, от обхода географических ограничений до тестирования веб-приложений. Каждая библиотека имеет свои особенности в настройке прокси, но общая идея остается той же: указать адрес и порт прокси-сервера, а также, при необходимости, логин и пароль. Выбор библиотеки зависит от конкретной задачи: axios подходит для простых HTTP запросов, а puppeteer и playwright — для автоматизации браузеров.
Полезные ссылки:
* Документация Axios{rel="nofollow"}
* Документация Puppeteer{rel="nofollow"}
* Документация Playwright{rel="nofollow"}