คำตอบสั้น
ฉันจะใช้พร็อกซีเมืองในสหรัฐฯ ใน Node.js ได้อย่างไร?
สร้าง undici ProxyAgent สำหรับ http://gw.metroproxies.com:7777 ด้วยชื่อผู้ใช้เมืองเช่น USERNAME-country-us-state-fl-city-orlando และส่งเป็น dispatcher ของ fetch; Playwright ใช้ค่าเดียวกันในตัวเลือก proxy MetroProxies มีการกำหนดเป้าหมายตามเมือง ZIP และ ASN ในทุกแพ็กเกจตั้งแต่ US$0.50/GB (ตุลาคม 2026) ไม่ต้อง 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 คืออะไร?
- Keep-alive:
ProxyAgentหนึ่งตัวใช้การเชื่อมต่อซ้ำ ดังนั้นในโหมดหมุนเวียนจะคง IP ทางออกเดิมไว้ตราบใดที่การเชื่อมต่อยังเปิดอยู่ สร้าง agent หนึ่งตัวต่อเมือง หรือปิดมัน เพื่อให้ได้ IP ใหม่ - เขตเวลาและ locale: ตัวเลือก
timezoneIdและlocaleของ Playwright ทำให้เบราว์เซอร์ตรงกับเมือง; หน้าเมือง แต่ละหน้าระบุเขต IANA (ไมอามี:America/New_York) - SOCKS5: Chromium ไม่ส่งชื่อผู้ใช้ไปยังพร็อกซี SOCKS5; ใช้พอร์ต HTTP ในเบราว์เซอร์
- Timeout:
AbortSignal.timeout()ใน fetch,timeoutใน Playwright - อัตรา: จำกัดคำขอไปยังแต่ละไซต์อย่างพอเหมาะและปฏิบัติตาม robots.txt และข้อกำหนด
ฉันควรไปที่ไหนต่อ?
เริ่มจาก การตั้งค่าห้านาที เปรียบเทียบกับตัวอย่าง Python และ curl และตรวจสอบทางออกด้วย ตัวตรวจสอบตำแหน่งพร็อกซี เอกสารทั้งหมด: เอกสาร
ผู้คนยังถามอะไรเกี่ยวกับ Node.js อีก?
ฉันต้องใช้ Node.js เวอร์ชันใด?
ต้องใช้ Node.js 18 ขึ้นไปสำหรับ AbortSignal.timeout และ top-level await ในไฟล์ .mjs ติดตั้ง undici ด้วย npm install undici และ Playwright ด้วย npm install playwright
Puppeteer ใช้ได้เหมือนกันไหม?
ได้: เปิดด้วย --proxy-server=http://gw.metroproxies.com:7777 แล้วเรียก page.authenticate({ username, password }) ก่อนการนำทางครั้งแรก
ตัวอย่างเหล่านี้รันกับเกตเวย์จริงหรือเปล่า?
ตรวจไวยากรณ์แล้วด้วย node --check โดยใช้ USERNAME และ PASSWORD เป็นตัวแทน รันด้วยข้อมูลรับรองของคุณเอง