Undici는 dispatcher로 요청을 보냅니다. 선택한 HTTP 프록시의 ProxyAgent를 만들고 전체 프로세스의 전역 dispatcher를 바꾸는 대신 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 프록시로 바꾸세요. 의도적으로 Undici의 fetch 구현을 가져오므로 dispatcher 옵션은 예제에 나온 클라이언트의 옵션입니다.

IP를 의심하기 전에 Node 호환성 확인하기

Undici가 지원하는 Node 버전은 패키지 릴리스에 따라 다릅니다. 이 예제는 Undici 8.12.3을 쓰며 Node 22.19.0 이상이 필요합니다. 모듈 로딩이나 엔진 버전 오류는 요청이 프록시에 도달하기 전에 발생합니다. 모든 Node가 최신 Undici를 실행한다고 가정하지 말고 설치된 패키지의 엔진 요구 사항을 확인하세요.

한 agent로 여러 요청 처리하기

짧은 프로그램은 끝날 때 dispatcher를 닫습니다. 실행 중인 앱이 같은 엔드포인트로 여러 요청을 보낸다면 해당 작업 동안 agent를 유지하고 작업이 끝나면 닫으세요. URL마다 agent를 만들고 닫으면 유용한 연결 재사용이 불가능합니다.

전역 dispatcher는 더 넓은 변경을 의도할 때만 적절합니다. 명시적으로 전달하면 다른 구성 요소의 발신 요청을 바꾸지 않고 프록시 IP를 시험하기 쉽습니다.

응답과 실패 단계 살펴보기

fetch는 모든 HTTP 오류 상태를 거부된 Promise로 처리하지 않습니다. 403이나 429는 프록시를 통해 전달된 실제 웹사이트 응답일 수 있습니다. 반면 연결이나 터널 오류는 응답 객체가 생기기 전에 요청을 거부할 수 있습니다. 상태와 호출에서 던지는 오류를 나눠 확인하세요.

인증이 필요하면 Undici의 ProxyAgent가 생성자 수준의 인증 옵션을 제공합니다. 웹사이트로 보낼 요청 헤더에 프록시 인증 헤더를 추가하지 마세요. agent는 다른 연결 구간을 처리합니다.

관련 글