Szybka odpowiedź
Jak używać proxy miasta USA w Node.js?
Utwórz undici ProxyAgent dla http://gw.metroproxies.com:7777 z nazwą użytkownika miasta, np. USERNAME-country-us-state-fl-city-orlando, i przekaż go jako dispatcher w fetch; Playwright przyjmuje te same wartości w opcji proxy. MetroProxies oferuje targetowanie po mieście, ZIP i ASN w każdym planie od 0,50 USD/GB (październik 2026). Bez KYC; kryptowaluty.
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();
Na co uważać w Node.js?
- Keep-alive: jeden
ProxyAgentponownie używa połączeń, więc w trybie rotacyjnym utrzymuje ten sam wyjściowy adres IP, dopóki połączenie pozostaje otwarte. Utwórz jednego agenta na miasto lub go zamknij, aby uzyskać nowy adres IP. - Strefa czasowa i locale: opcje
timezoneIdilocalew Playwright dopasowują przeglądarkę do miasta; każda strona miasta podaje swoją strefę IANA (Miami:America/New_York). - SOCKS5: Chromium nie wysyła nazwy użytkownika do proxy SOCKS5; w przeglądarkach używaj portu HTTP.
- Timeouty:
AbortSignal.timeout()w fetch,timeoutw Playwright. - Tempo: utrzymuj umiarkowaną liczbę żądań do każdej witryny i przestrzegaj jej robots.txt oraz regulaminu.
Gdzie warto zajrzeć dalej?
Zacznij od konfiguracji w pięć minut, porównaj z przykładami Python i curl i sprawdź wyjścia za pomocą sprawdzarki lokalizacji proxy. Cała dokumentacja: documentation.
O co jeszcze ludzie pytają w kontekście Node.js?
Jaka wersja Node.js jest mi potrzebna?
Node.js 18 lub nowszy dla AbortSignal.timeout i top-level await w plikach .mjs. Zainstaluj undici za pomocą npm install undici i Playwright za pomocą npm install playwright.
Czy Puppeteer też działa?
Tak: uruchom z --proxy-server=http://gw.metroproxies.com:7777 i wywołaj page.authenticate({ username, password }) przed pierwszą nawigacją.
Czy te przykłady były uruchamiane na bramie?
Są sprawdzane składniowo za pomocą node --check, z USERNAME i PASSWORD jako placeholderami. Uruchom je z własnymi danymi logowania.