Як використовувати проксі з Node-Fetch у 2026 році
Цей посібник пояснює, як я можу налаштувати проксі з Node-Fetch, керувати ротацією IP-адрес і обирати між безкоштовними та преміум-сервісами залежно від моїх потреб. Почнімо!
Prerequisites
Щоб повторювати приклад, переконайтеся, що у вас є:
- Node.js (v12.20.0 або новіша)
- Термінал або командний рядок
- Встановлено Node-Fetch і HTTPS-Proxy-Agent
Крок 1: Встановлення Node-Fetch і HTTPS-Proxy-Agent
У каталозі проєкту відкрийте термінал і виконайте такі команди:
npm i node-fetch
npm i https-proxy-agent
If you encounter an error such as cannot find module ‘node-fetch’, it’s often due to module resolution issues. Try running npm install to update dependencies in your project. Also, ensure your package.json file has “type”: “module” set, as Node-Fetch v3.x is an ESM-only module.
Що таке проксі та навіщо вони потрібні для вебскрапінгу
A проксі виступає посередником між вашим застосунком і цільовим сервером. Коли ви використовуєте проксі, ваші запити виглядають так, ніби надходять з IP-адреси проксі, а не з вашої власної, що може допомогти запобігти блокуванням.
Проксі бувають двох основних типів:
- HTTP Proxies: Підтримує лише HTTP-трафік.
- HTTPS Proxies: Підтримують трафік HTTP і HTTPS, що робить їх більш універсальними.
Використання проксі з Node-Fetch передбачає передавання власного проксі-агента до запиту fetch. Однак Node-Fetch не має вбудованої підтримки проксі, тож для цього ми використаємо пакет https-proxy-agent.
Безкоштовні чи платні проксі: що найкраще для вашого застосунку?
В інтернеті доступні безкоштовні списки проксі, але вони мають певні компроміси:
- Pros: Безкоштовні й широко доступні.
- Cons: Зазвичай нестабільні, повільніші й частіше блокуються вебсайтами.
Для застосунків, яким потрібна висока доступність, як-от вебскрапінг, платні проксі забезпечують значно кращу надійність і швидкість. Деякі сервіси надають ротаційні проксі та функції протидії блокуванню, які ми детальніше розглянемо далі.
Налаштування статичного проксі для Node-Fetch
Для початку скористаймося статичним проксі з Node-Fetch для виконання HTTP-запиту. Це налаштування підійде, якщо у вас є один проксі-сервер.
Import потрібний modules:
import fetch from 'node-fetch';
import { HttpsProxyAgent } from 'https-proxy-agent';
Define вашу конфігурацію проксі:
const proxyHost = '200.105.215.22';
const proxyPort = 33630;
const proxyUrl = `http://${proxyHost}:${proxyPort}`;
const proxyAgent = new HttpsProxyAgent(proxyUrl);
Виконайте запит через проксі:
(async () => {
const targetUrl = 'https://ident.me';
try {
const response = await fetch(targetUrl, { agent: proxyAgent });
const data = await response.text();
console.log(data); // Expected output: Proxy IP address
} catch (error) {
console.error(error);
}
})();
У цьому прикладі ми націлюємося на https://ident.me, що повертає IP-адресу того, хто надсилає запит. Цього налаштування достатньо для простих завдань, але воно часто є недостатнім для інтенсивного вебскрапінгу або API з обмеженням частоти запитів.
Ротаційні проксі з Node-Fetch: робота з динамічним блокуванням IP-адрес
Ротаційні проксі ідеально підходять для вебскрапінгу у великих обсягах і допомагають розподіляти запити між кількома IP-адресами, зменшуючи ймовірність блокування.
Докладніше про найкращі ротаційні проксі читайте тут
- Bright Data: Високопродуктивні проксі з розширеними можливостями, ідеальні для комплексних рішень.
- Smartproxy: Доступні, надійні проксі з глобальним охопленням, ідеальні для вебскрапінгу.
- Oxylabs: Виняткова продуктивність і підтримка, чудовий вибір для бізнесу, якому потрібні проксі найвищої якості.
- IPRoyal: Гнучка ротація й ціноутворення, підходить для невеликих проєктів або як резервний постачальник.
- SOAX: Преміальні проксі з точним таргетингом і кількома налаштуваннями ротації за конкурентними цінами.
- NetNut: Широкі можливості для масштабного вебскрапінгу, але базова документація та панель керування.
- Infatica: Доступні проксі етичного походження з надійною продуктивністю для бізнесу.
Крок 1: Створіть список проксі
Визначте список проксі, між якими може перемикатися ваш застосунок. Можна використати статичний список або динамічно завантажувати проксі з файлу чи через API.
const proxyList = [
{ host: '103.69.108.78', port: 8191 },
{ host: '61.29.96.146', port: 80 },
{ host: '154.204.58.155', port: 8090 }
];
Крок 2: Чергуйте проксі у запитах
Використайте цикл, щоб по черзі перемикатися між проксі, застосовуючи інший для кожного запиту. Цей підхід розподіляє навантаження між кількома IP.
import fetch from 'node-fetch';
import { HttpsProxyAgent } from 'https-proxy-agent';
const proxyList = [
{ host: '103.69.108.78', port: 8191 },
{ host: '61.29.96.146', port: 80 },
{ host: '154.204.58.155', port: 8090 }
];
async function rotateProxies(proxyList, targetUrl) {
for (const проксі of proxyList) {
const proxyUrl = `http://${proxy.host}:${proxy.port}`;
const proxyAgent = new HttpsProxyAgent(proxyUrl);
try {
const response = await fetch(targetUrl, { agent: proxyAgent });
const html = await response.text();
console.log(html);
} catch (error) {
console.error(`Error with proxy ${proxy.host}:${proxy.port}`, error);
}
}
}
const targetUrl = 'https://ident.me';
rotateProxies(proxyList, targetUrl);
Цей метод добре працює із сайтами, які не використовують складні механізми виявлення ботів. Водночас для сайтів із потужнішими антиботовими заходами варто розглянути преміальні ротаційні проксі.
Використання преміальних проксі-сервісів із Node-Fetch: обхід складних антиботових механізмів
Безкоштовні проксі часто ненадійні та легко виявляються, тож розглянемо більш надійне рішення. Преміальні провайдери проксі такі як Bright Data, ZenRows і Oxylabs, пропонують ротаційні проксі та мають складні механізми для обходу IP-блокувань і CAPTCHA.
Крок 1: Зареєструйтеся та отримайте API-ключ
Після реєстрації в Bright Data ви отримаєте ключ API, який дає змогу автентифікувати ваші запити через їхню проксі-мережу. Bright Data також надає користувацькі конфігурації та панелі керування, щоб управляти запитами й відстежувати використання.
const apiKey = '<YOUR_BRIGHT_DATA_API_KEY>';
const targetUrl = 'https://www.amazon.com';
const apiUrl = `https://brightdata.com/api/v1/?apikey=${apiKey}&url=${encodeURIComponent(targetUrl)}`;
Крок 2: Визначте додаткові параметри API
Bright Data пропонує різні параметри, щоб підвищити анонімність і зменшити ризик виявлення, зокрема увімкнення рендерингу JavaScript (корисного для роботи з динамічним контентом) і налаштування ротації проксі для кожного запиту.
const params = {
"js_render": "true", // Renders JavaScript for dynamic pages
"proxy_type": "residential" // Use residential proxies for higher anonymity
};
Крок 3: Зробіть запит через API Bright Data
Після налаштування ви можете використовувати Node-Fetch для виконання запитів через мережу Bright Data. Bright Data бере на себе ротацію IP та антиботові механізми, щоб ваші запити стабільно проходили.
import fetch from 'node-fetch';
(async () => {
const response = await fetch(apiUrl, {
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${apiKey}`
},
params: params
});
const html = await response.text();
const statusCode = response.status;
console.log('Код статусу:', statusCode);
console.log(html);
})();
Просунуті техніки: автоматизація ротації проксі за допомогою middleware та асинхронної обробки
Для більшої ефективності розгляньте створення middleware для автоматичного керування проксі. Ось приклад асинхронної обробки кількох запитів:
Створіть функцію що випадковим чином обирає проксі:
function getRandomProxy(proxyList) {
return proxyList[Math.floor(Math.random() * proxyList.length)];
}
Змініть логіку ротації з контролем одночасних запитів, щоб не перевантажувати сервери:
import fetch from 'node-fetch';
import { HttpsProxyAgent } from 'https-proxy-agent';
const proxyList = [ /* proxy objects */ ];
async function rotateProxies(targetUrl, concurrency = 5) {
const tasks = Array.from({ length: concurrency }, async () => {
const proxy = getRandomProxy(proxyList);
const proxyUrl = `http://${proxy.host}:${proxy.port}`;
const proxyAgent = new HttpsProxyAgent(proxyUrl);
try {
const response = await fetch(targetUrl, { agent: proxyAgent });
const html = await response.text();
console.log(`Success with ${proxy.host}:${proxy.port}`);
} catch (error) {
console.error(`Помилка з ${proxy.host}:${proxy.port}`, error);
}
});
await Promise.all(tasks);
}
const targetUrl = 'https://ident.me';
rotateProxies(targetUrl, 3); // Set concurrency as needed
Висновок
Using proxies with Node-Fetch has become essential for reliable web scraping and data automation. Whether you choose free proxies, premium services, or a custom rotation setup, these techniques will help you maintain access and avoid IP-based restrictions. Test each method with your target sites; some may require advanced premium solutions for consistent results.
Тепер, коли у вас є інструменти для ротації проксі та обходу блокувань IP, ви можете збирати дані навіть із найскладніших сайтів. Успішного вебскрапінгу!

