Undici kieruje żądanie przez dispatcher. Utwórz ProxyAgent dla wybranego proxy HTTP i przekaż go wywołaniu fetch zamiast zmieniać globalny dispatcher całego procesu.

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();
}

Zapisz program jako plik .mjs lub użyj projektu modułów ES. Zastąp dokumentacyjny IP serwerem HTTP z listy proxy HTTP. Import celowo używa implementacji fetch z Undici, więc opcja dispatcher należy do pokazanego klienta.

Sprawdź zgodność Node, zanim obwinisz IP

Wersje Node obsługiwane przez Undici zależą od wydania pakietu. Przykład używa Undici 8.12.3, który wymaga Node 22.19.0 lub nowszego. Błąd ładowania modułu lub wersji silnika występuje, zanim żądanie dotrze do proxy. Sprawdź wymagania zainstalowanego pakietu, zamiast zakładać, że każdy Node uruchamia najnowsze Undici.

Jeden agent może obsłużyć wiele żądań

Krótki program zamyka dispatcher na końcu. Jeśli działająca aplikacja wysyła kilka żądań przez ten sam punkt, zachowaj agenta dla tego obciążenia i zamknij go po jego zakończeniu. Tworzenie i zamykanie agenta dla każdego URL uniemożliwia użyteczne ponowne wykorzystanie połączeń.

Globalny dispatcher jest właściwy tylko, gdy zamierzasz wprowadzić szerszą zmianę. Jawne przekazanie ułatwia test IP proxy bez zmiany żądań wychodzących innych komponentów.

Obserwuj odpowiedź i etap błędu

Fetch nie traktuje każdego błędnego statusu HTTP jako odrzuconego Promise. 403 lub 429 może być prawdziwą odpowiedzią witryny przekazaną przez proxy. Błąd połączenia lub tunelu może natomiast odrzucić żądanie, zanim powstanie obiekt odpowiedzi. Odczytuj status oddzielnie od błędów rzucanych przez wywołanie.

Jeśli potrzebne jest uwierzytelnianie, ProxyAgent Undici oferuje opcje konstruktora. Nie dodawaj nagłówka autoryzacji proxy do nagłówków żądania witryny; agent obsługuje inny odcinek połączenia.

Powiązane artykuły