リダイレクト後に node-fetch にプロキシエージェントを選ばせる
HTTP と HTTPS の宛先にエージェント関数を渡すと、リダイレクト後も適切なプロキシエージェントを選べます。
最初の URL が HTTPS で、リダイレクト後の URL が HTTP という場合があります。ひとつのエージェントを最初の URL に結び付けるのではなく、リクエストごとの宛先に合わせてエージェントを選びます。
ESM アプリケーションでインポートした node-fetch パッケージには、関数を渡します。
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 の URL とプロキシのエンドポイントを置き換えます。公開の中間プロキシ経由で許可された公開 API では、HTTP プロキシ一覧が proxyUrl の候補を提供します。両方のエージェントは同じ HTTP プロキシリスナーを使えます。名前は宛先へのリクエストを指します。
| セレクターに渡される URL | 選択されるエージェント |
|---|---|
| https://… | httpsAgent |
| http://… | httpAgent |
そのためリダイレクトで宛先のプロトコルが変わっても、関数は対応するエージェントを選び続けます。proxyUrl はその判断とは独立に、中間プロキシを表し続けます。
エージェントはワークロードごとに一度だけ作成して再利用します。返されたステータスを処理し、呼び出し側のコードでレスポンスボディを読み取ります。このエージェントインターフェースは node-fetch のもので、Node 組み込みの fetch は別のトランスポートインターフェースを使います。