Respuesta rápida
¿Cómo uso un proxy de una ciudad de EE. UU. en Node.js?
Crea un ProxyAgent de undici para http://gw.metroproxies.com:7777 con un usuario de ciudad como USERNAME-country-us-state-fl-city-orlando, y pásalo como dispatcher de fetch; Playwright toma los mismos valores en su opción proxy. MetroProxies incluye segmentación por ciudad, ZIP y ASN en todos los planes desde 0,50 US$/GB (octubre de 2026). Sin KYC; criptomonedas.
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();
¿A qué debo prestar atención en Node.js?
- Keep-alive: un
ProxyAgentreutiliza conexiones, así que en modo rotativo mantiene la misma IP de salida mientras la conexión siga abierta. Crea un agent por ciudad, o ciérralo, para obtener una IP nueva. - Zona horaria e idioma: las opciones
timezoneIdylocalede Playwright hacen que el navegador coincida con la ciudad; cada página de ciudad indica su zona IANA (Miami:America/New_York). - SOCKS5: Chromium no envía usuario a los proxies SOCKS5; usa el puerto HTTP en navegadores.
- Timeouts:
AbortSignal.timeout()en fetch,timeouten Playwright. - Ritmo: mantén las peticiones a cada sitio moderadas y respeta su robots.txt y sus términos.
¿Adónde debería ir ahora?
Empieza con la configuración de cinco minutos, compara con los ejemplos de Python y curl, y comprueba las salidas con el verificador de ubicación de proxy. Toda la documentación: documentation.
¿Qué más pregunta la gente sobre Node.js?
¿Qué versión de Node.js necesito?
Node.js 18 o superior para AbortSignal.timeout y top-level await en archivos .mjs. Instala undici con npm install undici y Playwright con npm install playwright.
¿Puppeteer también funciona?
Sí: lanza con --proxy-server=http://gw.metroproxies.com:7777 y llama a page.authenticate({ username, password }) antes de la primera navegación.
¿Se ejecutaron estos ejemplos contra el gateway?
Se verifica su sintaxis con node --check, con USERNAME y PASSWORD como marcadores de posición. Ejecútalos con tus propias credenciales.