Използвайте IP на прокси с Undici в Node
Подайте Undici ProxyAgent на една fetch заявка и отделете пула му от несвързания Node трафик.
Undici маршрутизира заявка през диспечер. Създайте ProxyAgent за избраното HTTP прокси и го подайте на fetch извикването, вместо да сменяте глобалния диспечер на целия процес.
npm install [email protected]
import { fetch, ProxyAgent } from 'undici';
const dispatcher = new ProxyAgent('http://203.0.113.10:8080');
try {
const response = await fetch('https://example.com/', {
dispatcher,
signal: AbortSignal.timeout(15000),
});
console.log(response.status);
console.log(await response.text());
} finally {
await dispatcher.close();
}
Запазете програмата като файл .mjs или използвайте проект с ES модули. Заменете документационния IP с HTTP прокси от списъка с HTTP проксита. Импортът нарочно използва fetch реализацията на Undici, затова опцията dispatcher принадлежи на показания клиент.
Проверете Node съвместимостта, преди да обвините IP
Поддържаните от Undici версии на Node зависят от версията на пакета. Примерът ползва Undici 8.12.3, който изисква Node 22.19.0 или по-нов. Грешка при зареждане на модул или версия на средата възниква преди заявката да достигне прокси. Проверете изискването на инсталирания пакет, без да приемате, че всеки Node изпълнява най-новия Undici.
Един агент може да обслужва повторни заявки
Кратката програма затваря диспечера накрая. Ако работещо приложение изпраща няколко заявки през същата точка, задръжте агента за това натоварване и го затворете при края му. Създаването и затварянето на агент за всеки URL пречи на полезното повторно използване на връзки.
Глобален диспечер е подходящ само ако целите по-широката промяна. Изричното подаване улеснява теста на прокси IP без промяна на изходящите заявки на друг компонент.
Гледайте отговора и етапа на неуспеха
Fetch не приема всеки HTTP статус за грешка като отхвърлен Promise. 403 или 429 може да е истински отговор на сайта, пренесен от проксито. Грешка във връзката или тунела може вместо това да отхвърли заявката преди обекта отговор. Четете статуса отделно от грешките, хвърлени от извикването.
Ако е нужно удостоверяване, ProxyAgent на Undici предлага опции в конструктора. Не добавяйте заглавка за прокси авторизация към заглавките на заявката към сайта; агентът обработва друг участък от връзката.