Sans KYC — pas de pièce d'identité, pas de selfie, pas de documents · Ciblage par ville, État et code ZIP sur tous les forfaits
Langue: Français
Commencer

Docs · Node.js 18+

proxys résidentiels Node.js par ville US

Exemples avec undici (la bibliothèque derrière le fetch de Node) et Playwright, vérifiés syntaxiquement avec node --check.

Dernière mise à jour:

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.

1. fetch via une IP de ville (enregistrer sous city.mjs)
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();
2. Plusieurs villes, un agent chacune (enregistrer sous cities.mjs)
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();
  }
}
3. Playwright avec une IP de ville sticky (enregistrer sous browser.mjs)
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 ProxyAgent ré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 timezoneId et locale de 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, timeout dans 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.

1 GB 1,50 $US · sans KYC

Commencer