クイック回答
Node.jsで米国都市プロキシを使うには?
USERNAME-country-us-state-fl-city-orlandoのような都市ユーザー名を使ってhttp://gw.metroproxies.com:7777用のundici ProxyAgentを作成し、fetchのdispatcherとして渡します。Playwrightもproxyオプションで同じ値を使用します。MetroProxiesは$0.50/GB(2026年10月)以降のすべてのプランで都市・ZIP・ASNターゲティングを備えています。KYC不要、暗号通貨対応。
import { ProxyAgent, fetch } from 'undici';
const user = 'USERNAME-country-us-state-fl-city-orlando';
const agent = new ProxyAgent({
uri: 'http://gw.metroproxies.com:7777',
token: 'Basic ' + Buffer.from(`${user}:PASSWORD`).toString('base64'),
});
const res = await fetch('https://ipinfo.io/json', { dispatcher: agent, signal: AbortSignal.timeout(30000) });
if (!res.ok) throw new Error(`HTTP ${res.status}`);
console.log(await res.json());
await agent.close();
import { ProxyAgent, fetch } from 'undici';
const cities = [['fl', 'orlando'], ['fl', 'tampa'], ['ga', 'atlanta']];
for (const [state, city] of cities) {
const user = `USERNAME-country-us-state-${state}-city-${city}`;
const agent = new ProxyAgent({
uri: 'http://gw.metroproxies.com:7777',
token: 'Basic ' + Buffer.from(`${user}:PASSWORD`).toString('base64'),
});
try {
const res = await fetch('https://ipinfo.io/json', { dispatcher: agent, signal: AbortSignal.timeout(30000) });
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const info = await res.json();
console.log(city, '->', info.ip, info.city, info.region);
} catch (err) {
console.log(city, 'failed:', err.message);
} finally {
await agent.close();
}
}
import { chromium } from 'playwright';
const browser = await chromium.launch({
proxy: {
server: 'http://gw.metroproxies.com:7777',
username: 'USERNAME-country-us-state-fl-city-miami-session-mia01-ttl-15',
password: 'PASSWORD',
},
});
const context = await browser.newContext({ timezoneId: 'America/New_York', locale: 'en-US' });
const page = await context.newPage();
await page.goto('https://ipinfo.io/json', { timeout: 60000 });
console.log(await page.textContent('body'));
await browser.close();
Node.jsで気をつけるべきことは?
- キープアライブ: 1つの
ProxyAgentが接続を再利用するため、ローテーションモードでは接続が開いている間は同じ出口IPが維持されます。新しいIPを取得するには、都市ごとに1つのエージェントを作成するか、エージェントを閉じてください。 - タイムゾーンとロケール: Playwrightの
timezoneIdとlocaleオプションにより、ブラウザを都市に合わせられます。各都市ページにはIANAゾーンが記載されています(マイアミ:America/New_York)。 - SOCKS5: ChromiumはSOCKS5プロキシにユーザー名を送信しません。ブラウザではHTTPポートを使用してください。
- タイムアウト: fetchでは
AbortSignal.timeout()、Playwrightではtimeout。 - レート: 各サイトへのリクエストは控えめにし、robots.txtと利用規約に従ってください。
次にどこへ進むべきですか?
5分セットアップから始め、Pythonとcurlの例と比較し、プロキシロケーションチェッカーで出口を確認してください。すべてのドキュメント:ドキュメント。
Node.jsについて他によくある質問は?
必要なNode.jsのバージョンは?
Node.js 18以降(AbortSignal.timeoutおよび.mjsファイルでのトップレベルawait用)。undiciはnpm install undiciで、Playwrightはnpm install playwrightでインストールします。
Puppeteerも動きますか?
はい:--proxy-server=http://gw.metroproxies.com:7777で起動し、最初のナビゲーション前にpage.authenticate({ username, password })を呼び出します。
これらの例はゲートウェイに対して実行されましたか?
node --checkで構文チェック済みで、USERNAMEとPASSWORDはプレースホルダーです。ご自身の認証情報で実行してください。