Використання проксі з Node-Fetch

Як використовувати проксі з 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.

Що таке проксі та навіщо вони потрібні для вебскрапінгу

проксі виступає посередником між вашим застосунком і цільовим сервером. Коли ви використовуєте проксі, ваші запити виглядають так, ніби надходять з 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-адресами, зменшуючи ймовірність блокування.

Докладніше про найкращі ротаційні проксі читайте тут

  1. Bright Data: Високопродуктивні проксі з розширеними можливостями, ідеальні для комплексних рішень.
  2. Smartproxy: Доступні, надійні проксі з глобальним охопленням, ідеальні для вебскрапінгу.
  3. Oxylabs: Виняткова продуктивність і підтримка, чудовий вибір для бізнесу, якому потрібні проксі найвищої якості.
  4. IPRoyal: Гнучка ротація й ціноутворення, підходить для невеликих проєктів або як резервний постачальник.
  5. SOAX: Преміальні проксі з точним таргетингом і кількома налаштуваннями ротації за конкурентними цінами.
  6. NetNut: Широкі можливості для масштабного вебскрапінгу, але базова документація та панель керування.
  7. 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, ви можете збирати дані навіть із найскладніших сайтів. Успішного вебскрапінгу!

Схожі записи