プロセス環境に経路を選ばせるなら EnvHttpProxyAgent を使います。エンドポイントをクライアント設定として持たせるなら、明示的なUndici ProxyAgentを使います。実際のリクエストに渡してください。エージェントを作るだけではfetch呼び出しは変わりません。

import { EnvHttpProxyAgent, fetch } from 'undici';

const dispatcher = new EnvHttpProxyAgent();

try {
  const response = await fetch("https://example.com/", {
    dispatcher,
    signal: AbortSignal.timeout(15000),
  });
  console.log(response.status);
  await response.arrayBuffer();
} finally {
  await dispatcher.close();
}

Undiciを利用できるESモジュール環境で、これを proxy-check.mjs として保存します。次のPOSIXでの起動は、二つのプロキシ経路と空の迂回リストを渡します。

http_proxy=http://203.0.113.10:8080 \
https_proxy=http://203.0.113.10:8080 \
no_proxy= \
node proxy-check.mjs

ドキュメント用エンドポイントを自分のHTTPプロキシか、HTTPプロキシリストの候補に置き換えます。これらの代入は今回の起動に適用されます。ほかのシェルでは構文が異なります。

Undici 8.12.3では、小文字の http_proxy、https_proxy、no_proxy が大文字の対応変数と共存すると、小文字が優先されます。HTTPとHTTPSの宛先はそれぞれの設定を選びます。HTTPの設定だけでもHTTPSのフォールバックになりますが、HTTPSの設定だけではHTTPを補いません。ほかのクライアントの ALL_PROXY という慣習が適用されると思わないでください。

入力このリリースで使われるタイミング
HTTP/HTTPSプロキシ環境変数エージェントの構築時に選ばれます。エンドポイントを変えたら、新しいdispatcherを作成します。
環境の no_proxyリクエストの振り分け時に再確認されます。
コンストラクタの noProxy後の環境変更を追わず、迂回方針を明示的に固定します。

迂回規則はホストと任意のポートに一致できます。アスタリスク一つだけなら、すべてのリクエストが迂回します。プロキシに通信が来ない場合は、宛先が一致していないかを確認してください。

Windowsでは、メインプロセスは環境変数名の大文字と小文字を区別しないため、HTTP_PROXYとhttp_proxyは独立した値ではありません。Node Workerの環境コピーには、文書に示された大文字と小文字の区別があります。両方の表記を設定して優先順位を試す前に、この違いを考慮してください。例では処理終了後にdispatcherを閉じます。同じ取り込み済みエンドポイント方針を使ってリクエストを繰り返す間は、保持しておきます。

関連記事