Как установить прокси в Node-Fetch

Узнайте, как установить прокси в Node-Fetch в этом пошаговом руководстве.
2 min read
Proxy in node fetch

В этом руководстве по прокси-серверу node-fetch будут рассмотрены следующие вопросы:

  • Почему нельзя использовать прокси в родном Fetch API Node.js
  • Использование HTTP, HTTPS или SOCKS-прокси с node-fetch
  • Работа с аутентификацией и ротацией прокси-серверов

Почему нельзя использовать прокси-серверы в родном Fetch API Node.js

В Node.js 18 наконец-то появилась реализация Fetch API, интерфейса для получения локальных и удаленных ресурсов. В частности, Fetch API предоставляет простую в использовании функцию fetch(), которая работает как клиент для выполнения HTTP-запросов. Более подробную информацию можно найти в нашем руководстве по Node.js Fetch API.

К сожалению, текущая реализация Fetch API в Node.js не поддерживает прокси. На момент написания статьи работа над этой функцией ведется, но она не успела появиться в Node.js 20. Поддержка прокси в Fetch API может появиться в следующих обновлениях. Однако на данный момент для использования прокси в Node.js необходим внешний HTTP-клиент.

Здесь вы узнаете, как установить прокси в node-fetch, одной из самых популярных библиотек HTTP-клиентов на основе Fetch-API для Node.js.

Использование прокси-сервера с помощью node-fetch

В этом разделе о прокси node-fetch мы рассмотрим, как настроить прокси HTTP/HTTPS/SOCKS.

Пререквизиты

Во-первых, необходимо добавить пакет node-fetch npm в зависимости вашего проекта Node.js с помощью:

npm install node-fetch 

Обратите внимание, что node-fetch – это модуль, предназначенный только для ESM. Это означает, что для него требуется параметр "type": "module" в файле package.json. Если вы являетесь пользователем CommonJS, ознакомьтесь с рекомендациями на официальной странице GitHub.

Следует иметь в виду, что node-fetch поддерживает прокси через http.Agent, но не предлагает нативного способа их установки. Решить эту проблему поможет проект Proxy Agents, который предоставляет реализации http.Agent для использования прокси в различных протоколах. В частности, различные npm-библиотеки, предлагаемые проектом, классифицируются по протоколам:

Отлично! Вы готовы к установке прокси в node-fetch!

Прокси HTTP/HTTPs

Сначала установите библиотеку https-proxy-agent npm с помощью:

npm install https-proxy-agent

Этот пакет позволяет подключиться к HTTP- или HTTPS-прокси-серверу для получения HTTPS-адреса.

Импортируйте реализацию прокси-агента из библиотеки:

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

Примечание: Если вместо этого требуется посещать HTTP URL, то следует использовать http-proxy-agent, а затем импортировать из него HttpProxyAgent.

Затем получите URL-адрес вашего HTTP/HTTPS-прокси и сохраните его в переменной:

const proxyURL = "<PROXY_PROTOCOL>://<PROXY_HOST>:<PROXY_PORT>" 

Замените и на хост и порт вашего прокси-сервера соответственно.

будет иметь значение http в HTTP-прокси или https в HTTPS-прокси.

Это пример корректного URL-адреса HTTP/HTTPS-прокси:

const proxyURL = "http://38.112.54.21:3128"

Установите HTTP/HTTPS-прокси в node-fetch, как показано ниже:

const proxyAgent = new HttpsProxyAgent(proxyURL)

const response = await fetch(targetURL, { 

    agent: proxyAgent 

})

HttpsProxyAgent() инициализирует экземпляр http.Agent для выполнения HTTPS-запросов через указанный прокси-сервер. Передайте этот объект в опцию agent, чтобы убедить node-fetch использовать HTTP/HTTPS-прокси по своему усмотрению.

Прокси SOCKS

Добавьте библиотеку socks-proxy-agent npm в зависимости вашего проекта с помощью:

npm install socks-proxy-agent

Эта библиотека позволяет подключаться к SOCKS-прокси-серверу для получения HTTP- или HTTPS-адреса.

Далее импортируйте из пакета реализацию прокси-агента SOCKS:

import { SocksProxyAgent } from "socks-proxy-agent"

Инициализируйте переменную, содержащую URL вашего SOCKS-прокси:

const proxyURL = "<PROXY_PROTOCOL>://<PROXY_HOST>:<PROXY_PORT>" 

Замените и на хост и порт прокси-сервера SOCKS соответственно. будет иметь одно из следующих значений: socks, socks5, socks4.

Это пример корректного URL-адреса SOCKS-прокси:

const proxyURL = "socks://47.123.45.15:8632"

Затем можно настроить SOCKS-прокси в node-fetch следующим образом:

const proxyAgent = new SocksProxyAgent(proxyURL)

const response = await fetch(targetURL, { 

    agent: proxyAgent 

})

SocksProxyAgent() инициализирует экземпляр http.Agent для выполнения HTTP/HTTPS-запросов через указанный SOCKS-прокси-сервер. Опять же, для установки прокси достаточно передать этот объект в опцию агента.

Законченный пример  

Проверим, что описанные выше подходы к прокси-серверу для выборки узлов работают. Если у вас нет URL прокси-сервера, вы можете получить HTTP/HTTPS прокси-сервер на Free Proxy List. Посмотрите на этот:

IP Address: 75.89.101.62; Port: 80

Это означает, что URL этого прокси-сервера – http://75.89.101.62:80.

Поскольку извлекаемый прокси является HTTP/HTTPS-прокси, необходимо использовать HttpsProxyAgent. Приведенный ниже пример можно легко адаптировать для работы с SOCKS-прокси. Чтобы убедиться в правильности настройки прокси, обратимся к конечной точке /ip из проекта HTTPBin. Этот публичный API возвращает IP входящего запроса. Другими словами, он должен возвращать IP прокси-сервера.

Здесь приведен полный фрагмент Node.js:

import fetch from "node-fetch"

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

async function testProxy() {

    // define the HTTP/HTTPS proxy agent

    const proxyURL = "http://75.89.101.62:80"

    const proxyAgent = new HttpsProxyAgent(proxyURL)

    // perform the desired request through the proxy

    const response = await fetch("https://httpbin.io/ip", {

        agent: proxyAgent

    })

    // print the result

    const responseData = await response.json()

    console.log(responseData)

}

testProxy()

Запустите скрипт, и он должен вывести сообщение:

{ origin: '75.89.101.62' }

Это тот же IP, что и у прокси-сервера, а значит, прокси работает, как и ожидалось, и ваш IP в безопасности! Обратите внимание, что бесплатные прокси настолько недолговечны, что выбранный прокси может уже не работать к тому времени, когда вы будете читать эту статью.

Использование бесплатных прокси вполне допустимо в учебных целях, но в реальных условиях полагаться на них нельзя. Бесплатные прокси ненадежны, медленны, подвержены ошибкам, жадны до данных и недолговечны. Избегайте их!

Решение? Премиум-прокси от Bright Data, лучшего провайдера на рынке. Подпишитесь и попробуйте наши надежные прокси бесплатно.

Прокси node-fetch: Дополнительные возможности

Теперь, когда вы знаете основы интеграции узла и прокси-выборки, пришло время перейти к более сложным техникам.

Аутентификация через прокси

Премиум-прокси защищены аутентификацией. Вот как выглядит URL аутентифицированного прокси:

[<PROTOCOL>://]<USERNAME>:<PASSWORD>@<HOST>[:<PORT>]

Подключение к аутентифицированному прокси без указания имени пользователя и пароля приведет к ошибке 407 Proxy Authentication Required.

Предположим, что это информация, необходимая для подключения к аутентифицированному прокси:

  • Протокол: HTTP
  • Host: 165.227.0.192
  • Post: 8361
  • Имя пользователя: admin
  • Пароль: eX4w88MEe63YLqGkz

Пакеты Proxy Agents предлагают два способа работы с аутентификацией:

  1. Укажите учетные данные непосредственно в URL-адресе прокси:

var proxyAgent = new HttpsProxyAgent("https://admin:[email protected]:8361")

  1. Задайте параметры имени пользователя и пароля из URL:

const proxyOpts = new URL("http://165.227.0.192:8361")

proxyOpts.username = "admin"

proxyOpts.password = "eX4w88MEe63YLqGkz"

const proxyAgent = new HttpsProxyAgent(proxyOpts)

Эти подходы работают и с SocksProxyAgent.

Вращающиеся прокси в node-fetch

Если вы будете использовать один и тот же прокси-сервер раз за разом, то целевой сайт в итоге заблокирует его IP. Чтобы избежать этого, необходимо убедиться, что каждый запрос выполняется с другого прокси-сервера. Это можно сделать следующим образом:

  1. Определите список с URL всех ваших прокси
  2. Случайным образом выберите URL прокси
  3. Установите URL прокси в node-fetch

Такое решение подразумевает наличие доступа к пулу надежных прокси-серверов. Приобретение доступа к таким серверам может стоить немалых денег. Кроме того, реализация такой логики в коде является шаблонной и трудоемкой.

Именно поэтому Bright Data предлагает ротационные прокси, которые автоматически меняют IP-адреса для вас! Эта услуга предоставляет доступ к прокси, которые предоставляют новый IP при каждом подключении к ним. Эти прокси-серверы доступны в 195 странах, имеют высочайшее время безотказной работы и гарантируют 99,9% успеха. Попробуйте ротационные прокси Bright Data уже сегодня!

Заключение

В этом руководстве по прокси в node-fetch вы узнали, почему нельзя использовать прокси в реализации Node.js Fetch API, и как это сделать с помощью библиотеки. Теперь вы знаете, как настроить HTTP/HTTPS/SOCKS-прокси в node-fetch. Для этого потребуется всего пара настроек и несколько строк кода!

Как мы выяснили здесь, использовать node-fetch с прокси-сервисами от бесплатных провайдеров нельзя. Таким образом, основное техническое решение, которое необходимо принять, – это выбор прокси-провайдера. Экономьте время и силы и выбирайте лучшее на рынке – Bright Data.

Bright Data контролирует лучшие прокси-серверы в мире, обслуживая компании из списка Fortune 500 и 20 000+ клиентов. Всемирная сеть прокси включает в себя:

В целом это одна из самых крупных и надежных прокси-сетей на рынке, ориентированных на скраппинг. Обратитесь к одному из наших торговых представителей и узнайте, какой из продуктов Bright Data лучше всего подходит для ваших целей.

More from Bright Data

Datasets Icon

Get immediately structured data

Access reliable public web data for any use case. The datasets can be downloaded or delivered in a variety of formats. Subscribe to get fresh records of your preferred dataset based on a pre-defined schedule.

Web scraper IDE Icon

Build reliable web scrapers. Fast.

Build scrapers in a cloud environment with code templates and functions that speed up the development. This solution is based on Bright Data's Web Unlocker and proxy infrastructure making it easy to scale and never get blocked.

Web Unlocker Icon

Implement an automated unlocking solution

Boost the unblocking process with fingerprint management, CAPTCHA-solving, and IP rotation. Any scraper, written in any language, can integrate it via a regular proxy interface.

Ready to get started?