Réponse rapide
Comment utiliser un proxy de ville US dans Node.js ?
Créez un ProxyAgent undici pour http://gw.metroproxies.com:7777 avec un identifiant de ville comme USERNAME-country-us-state-fl-city-orlando, et passez-le comme dispatcher de fetch ; Playwright prend les mêmes valeurs dans son option proxy. MetroProxies inclut le ciblage par ville, ZIP et ASN sur tous les forfaits à partir de 0,50 $US/GB (octobre 2026). Sans KYC ; payer en crypto.
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();
À quoi faut-il faire attention en Node.js ?
- Keep-alive : un
ProxyAgentréutilise les connexions, donc en mode rotatif il garde la même IP de sortie tant qu'une connexion reste ouverte. Créez un agent par ville, ou fermez-le, pour obtenir une nouvelle IP. - Fuseau horaire et locale : les options
timezoneIdetlocalede Playwright alignent le navigateur sur la ville ; chaque page de ville donne sa zone IANA (Miami :America/New_York). - SOCKS5 : Chromium n'envoie pas d'identifiant aux proxies SOCKS5 ; utilisez le port HTTP dans les navigateurs.
- Timeouts :
AbortSignal.timeout()dans fetch,timeoutdans Playwright. - Débit : gardez les requêtes vers chaque site modestes et respectez son robots.txt et ses conditions.
Où aller ensuite ?
Commencez par la configuration en cinq minutes, comparez avec les exemples Python et curl, et vérifiez les sorties avec le vérificateur de localisation de proxy. Toute la doc : documentation.
Que demande-t-on d'autre sur Node.js ?
Quelle version de Node.js me faut-il ?
Node.js 18 ou version ultérieure pour AbortSignal.timeout et top-level await dans les fichiers .mjs. Installez undici avec npm install undici et Playwright avec npm install playwright.
Est-ce que Puppeteer fonctionne aussi ?
Oui : lancez avec --proxy-server=http://gw.metroproxies.com:7777 et appelez page.authenticate({ username, password }) avant la première navigation.
Ces exemples ont-ils été testés sur la passerelle ?
Ils sont vérifiés syntaxiquement avec node --check, avec USERNAME et PASSWORD comme placeholders. Exécutez-les avec vos propres identifiants.