Пусть node-fetch сам выберет прокси-агент после перенаправления
Передайте функцию агента для адресов HTTP и HTTPS, чтобы после перенаправления выбирался подходящий прокси-агент.
Первый URL может быть HTTPS, а URL после перенаправления — HTTP. Выбирайте агент по адресу каждого запроса, а не привязывайте один агент к первому URL.
Для импортированного пакета node-fetch в приложении ESM передайте функцию:
import fetch from 'node-fetch';
import { HttpProxyAgent } from 'http-proxy-agent';
import { HttpsProxyAgent } from 'https-proxy-agent';
const proxyUrl = 'http://proxy.example:8080';
const httpAgent = new HttpProxyAgent(proxyUrl);
const httpsAgent = new HttpsProxyAgent(proxyUrl);
const response = await fetch('https://api.example/', {
agent: url => url.protocol === 'http:' ? httpAgent : httpsAgent,
});Замените адрес API и конечную точку прокси. Для публичного API, разрешённого через публичного посредника, список HTTP-прокси даёт кандидатов для proxyUrl. Оба агента могут использовать один и тот же слушатель HTTP-прокси; их имена относятся к запросу к адресу назначения.
| URL, переданный селектору | Выбранный агент |
|---|---|
| https://… | httpsAgent |
| http://… | httpAgent |
Поэтому функция по-прежнему выбирает подходящий агент, если перенаправление меняет протокол назначения. proxyUrl продолжает описывать посредника независимо от этого решения.
Создайте агенты один раз для нагрузки и используйте повторно. Обработайте возвращённый статус и прочитайте тело ответа в вызывающем коде. Этот интерфейс агента относится к node-fetch; встроенный fetch в Node использует другой транспортный интерфейс.