Neden Node.js'ta Proxies kullanın?
Node.js, web scrapers, API bütünleyicileri ve otomasyon araçları oluşturmak için en popüler runtimes biridir. Ancak, tek bir IP adresinden yüzlerce veya binlerce istek gönderiyorsanız, hızla oran sınırlarına gireceksiniz, CAPTCHAs ve outright IP yasakları. Node.js Bunu farklı IP adresleri aracılığıyla iptal ederek çözmek, her biri eşsiz bir kullanıcıdan geliyor gibi görünüyor.
Ürün fiyatlarını dökmek, arama motoru sıralamalarını izlemek veya ölçek, proxy'lerde kamu verilerini toplamak önemlidir. Bu kılavuzda, konut temsilcilerini Node.js projelerinizi kullanarak entegre etmeniz gereken her şeyi ele alacağız. ProxyHat Node SDK, Axios, Puppeteer ve Playwright.
Hangi proxy tipinin kullanım durumunuza uygun olduğunu hala değerlendirirseniz, karşılaştırmamızı kontrol edin Konut vs datacenter vs mobil proxy.
Kurulum ve Kurulum
ProxyHat SDK'sını yükleyin
Başlamak için en hızlı yol resmi Node SDK ile. Kimlik doğrulama, rotasyon ve kutudan bağlantı havuzu:
npm install proxyhatAyrıca kullanmak için planladığınız HTTP müşterileri isteyeceksiniz:
npm install axios puppeteer playwrightKimlik Doğrulama
Tüm ProxyHat proxy bağlantılarını API bilginizle gerçekleştirin. Kullanıcınızı ve şifrenizi kullanabilirsiniz ProxyHat dashboard. SDK onları yerleşik seçenekler veya çevre değişkenleri olarak kabul eder:
// Option 1: Pass credentials directly
const ProxyHat = require('proxyhat');
const client = new ProxyHat({
username: 'your_username',
password: 'your_password',
});
// Option 2: Use environment variables
// Set PROXYHAT_USERNAME and PROXYHAT_PASSWORD in your .env
const client = new ProxyHat();Basit GET SDK ile istek
SDK yüksek seviyeli sağlar fetch Proxy rotasyonunu otomatik olarak ele alan yöntem:
const ProxyHat = require('proxyhat');
const client = new ProxyHat();
async function main() {
const response = await client.fetch('https://httpbin.org/ip', {
country: 'us',
});
console.log('Status:', response.status);
console.log('Body:', await response.text());
}
main().catch(console.error);Her çağrı otomatik olarak farklı bir konut IP seçer. Hiçbir manuel URL proxy formatı gerekli değil.
Axios ile Proxies Kullanımı
Axios, Node.js ekosisteminde en popüler HTTP müşterisidir. Axios'un ProxyHat aracılığıyla talep etmesi için, ya SDK'nın proxy URL'sini kullanabilir veya Axios'u doğrudan yapılandırabilirsiniz.
Yöntem 1: SDK Proxy Agent
const ProxyHat = require('proxyhat');
const axios = require('axios');
const client = new ProxyHat();
const agent = client.createAgent({ country: 'us' });
async function scrapeWithAxios() {
const response = await axios.get('https://httpbin.org/ip', {
httpAgent: agent,
httpsAgent: agent,
timeout: 30000,
});
console.log('IP:', response.data.origin);
}
scrapeWithAxios();Yöntem 2: Doğrudan Proxy URL
manuel yapılandırmayı tercih ederseniz, standart URL formatını standart URL formatı ile kullanın https-proxy-agent Paket:
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');
const proxyUrl = 'http://USERNAME:PASSWORD@gate.proxyhat.com:8080';
const agent = new HttpsProxyAgent(proxyUrl);
async function scrapeWithAxios() {
const response = await axios.get('https://httpbin.org/ip', {
httpsAgent: agent,
timeout: 30000,
});
console.log('IP:', response.data.origin);
}
scrapeWithAxios();Axios Varsayılan Proxy
Tekrarlanan kullanım için, önceden yapılandırılmış bir Axios örneği oluşturun:
const { HttpsProxyAgent } = require('https-proxy-agent');
const agent = new HttpsProxyAgent('http://USERNAME:PASSWORD@gate.proxyhat.com:8080');
const proxyClient = axios.create({
httpsAgent: agent,
timeout: 30000,
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
},
});
// All requests now go through the proxy
const res = await proxyClient.get('https://example.com');Puppeteer ile Proxies Kullanımı
Puppeteer, JavaScript-heavy web sitelerini kazımak için ideal olan bir başsız Chrome tarayıcısını başlatır. Proxies tarayıcı fırlatma seviyesinde yapılandırılır.
const puppeteer = require('puppeteer');
async function scrapeWithPuppeteer() {
const browser = await puppeteer.launch({
args: ['--proxy-server=gate.proxyhat.com:8080'],
headless: 'new',
});
const page = await browser.newPage();
// Authenticate with the proxy
await page.authenticate({
username: 'USERNAME',
password: 'PASSWORD',
});
await page.goto('https://httpbin.org/ip', {
waitUntil: 'networkidle2',
timeout: 60000,
});
const content = await page.evaluate(() => document.body.innerText);
console.log('IP:', content);
await browser.close();
}
scrapeWithPuppeteer();Puppeteer ile Geo-Targeting
Belirli bir ülkeyi hedeflemek için, ülke kodunu kullanıcı adınıza ekleyin. ProxyHat, formatı kullanır USERNAME-country-XX:
await page.authenticate({
username: 'USERNAME-country-de', // Route through Germany
password: 'PASSWORD',
});Tüm mevcut proxy yerlerine göz atın lokasyon sayfası.
Playwright ile Proxies Kullanımı
Playwright, Chromium, Firefox ve WebKit'i destekler. Proxy yapılandırması başlatılmış seçeneklere yapılır, daha basit hale getirir:
const { chromium } = require('playwright');
async function scrapeWithPlaywright() {
const browser = await chromium.launch({
proxy: {
server: 'http://gate.proxyhat.com:8080',
username: 'USERNAME',
password: 'PASSWORD',
},
});
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('https://httpbin.org/ip');
const body = await page.textContent('body');
console.log('IP:', body);
await browser.close();
}
scrapeWithPlaywright();Playwright with Per-Context Proxies
Playwright, tarayıcı bağlamında farklı proxylara izin verir, bu çok fazla hesap veya multi-region scraping için faydalıdır:
const browser = await chromium.launch();
// US context
const usContext = await browser.newContext({
proxy: {
server: 'http://gate.proxyhat.com:8080',
username: 'USERNAME-country-us',
password: 'PASSWORD',
},
});
// UK context
const ukContext = await browser.newContext({
proxy: {
server: 'http://gate.proxyhat.com:8080',
username: 'USERNAME-country-gb',
password: 'PASSWORD',
},
});
const usPage = await usContext.newPage();
const ukPage = await ukContext.newPage();
await Promise.all([
usPage.goto('https://www.google.com/search?q=proxy+service'),
ukPage.goto('https://www.google.co.uk/search?q=proxy+service'),
]);Bloking vs Sticky Sessions
ProxyHat farklı kazı ihtiyacına hizmet eden iki seans modunu destekler:
| Özellik | Rotating Rotating | Sticky |
|---|---|---|
| IP per request | Yeni IP her seferinde | Oturum süresi için aynı IP |
| En iyisi için | Büyük ölçekli kazı | Çok adımlı akışlar, giriş seansları |
| Oturum süresi | N/A | 30 dakikaya kadar |
| Username format | USERNAME | USERNAME-session-XXXX |
Sticky Session Örnek
const { HttpsProxyAgent } = require('https-proxy-agent');
const axios = require('axios');
// Generate a random session ID
const sessionId = 'session_' + Math.random().toString(36).slice(2, 10);
const agent = new HttpsProxyAgent(
`http://USERNAME-session-${sessionId}:PASSWORD@gate.proxyhat.com:8080`
);
// All requests with this agent use the same IP
const client = axios.create({ httpsAgent: agent, timeout: 30000 });
const res1 = await client.get('https://httpbin.org/ip');
const res2 = await client.get('https://httpbin.org/ip');
console.log(res1.data.origin === res2.data.origin); // trueGeo-Targeted Requests
Geo-targeting, eleştireldir SERP izlemeYerelleştirilmiş fiyat izleme ve bölgesel içerik doğrulama. ProxyHat, ülke düzeyinde ve şehir seviyesindeki hedeflemeyi kullanıcı dizenizle destekliyor:
// Country targeting
const countryAgent = new HttpsProxyAgent(
'http://USERNAME-country-jp:PASSWORD@gate.proxyhat.com:8080'
);
// City targeting
const cityAgent = new HttpsProxyAgent(
'http://USERNAME-country-us-city-newyork:PASSWORD@gate.proxyhat.com:8080'
);Tüm listemize göz atın Mevcut yerlerde mevcut yerler mevcut Desteklenen ülkeler ve şehirler için.
Hata işleme ve Retries
Ağ hataları ölçeklendirmede referanslarla çalışırken kaçınılmazdır. Güçlü bir yeniden deneme stratejisi, üretim hurdaları için gereklidir:
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');
async function fetchWithRetry(url, options = {}) {
const maxRetries = options.maxRetries || 3;
const baseDelay = options.baseDelay || 1000;
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
const agent = new HttpsProxyAgent(
'http://USERNAME:PASSWORD@gate.proxyhat.com:8080'
);
const response = await axios.get(url, {
httpsAgent: agent,
timeout: options.timeout || 30000,
});
if (response.status === 200) return response;
throw new Error(`HTTP ${response.status}`);
} catch (error) {
console.warn(`Attempt ${attempt}/${maxRetries} failed: ${error.message}`);
if (attempt === maxRetries) throw error;
// Exponential backoff: 1s, 2s, 4s...
const delay = baseDelay * Math.pow(2, attempt - 1);
await new Promise(r => setTimeout(r, delay));
}
}
}
// Usage
const response = await fetchWithRetry('https://example.com', {
maxRetries: 3,
timeout: 20000,
});Concurrency Control
Tüm istekleri bir anda göndererek Promise.all Hem makineniz hem de hedef sunucunuz overwhelm. Paralel bağlantıların sayısını kontrol etmek için tutarlı bir limit kullanın:
async function asyncPool(concurrency, items, iteratorFn) {
const results = [];
const executing = new Set();
for (const [index, item] of items.entries()) {
const promise = Promise.resolve().then(() => iteratorFn(item, index));
results.push(promise);
executing.add(promise);
const cleanup = () => executing.delete(promise);
promise.then(cleanup, cleanup);
if (executing.size >= concurrency) {
await Promise.race(executing);
}
}
return Promise.all(results);
}
// Scrape 100 URLs, 10 at a time
const urls = Array.from({ length: 100 }, (_, i) =>
`https://example.com/page/${i + 1}`
);
const results = await asyncPool(10, urls, async (url) => {
return fetchWithRetry(url, { maxRetries: 2, timeout: 15000 });
});Büyük ölçekli için Web scraping projeleriAncak 5 ve 20 arasında karşılıklılık tutmak hız ve güvenilirlik arasında iyi bir denge sunar. rehberimizi oku Web için en iyi proxy 2026 Daha fazla mimari tavsiye için.
Üretim İpuçları
Bağlantı Yönetimi
- İstek başına yeni olanları yaratmak yerine Axios örneklerini ve proxy ajanlarını kullanın. Bu, soket egzozundan kaçınır.
- Set Set Set Set
keepAlive: trueHTTP ajanınızda kalıcı bağlantılar için. - Close Puppeteer/Playwright tarayıcılar hemen ücretsiz hafıza için kullandıktan sonra.
Memory and Timeouts
- Puppeteer için, kullanın
page.setRequestInterception(true)Görüntüler, CSS ve fontları sadece HTML içeriğine ihtiyacınız olduğunda. Bu, bant genişliğini ve hafıza kullanımını önemli ölçüde azaltır. - Her istekte her zaman açık zamanlar oluşturun. Eksik bir zamanout, asılı kazıların bir numaralı nedenidir.
- Monitor Node.js memory with
process.memoryUsage()Uzun süren kazıcılarda.
Faster için İstek Interceptioning
const page = await browser.newPage();
await page.setRequestInterception(true);
page.on('request', (req) => {
const blocked = ['image', 'stylesheet', 'font', 'media'];
if (blocked.includes(req.resourceType())) {
req.abort();
} else {
req.continue();
}
});
await page.goto('https://example.com');Çevre Değişkenleri
Hiçbir zaman zor kod kimlikleri. Bir kullanın .env Dosya ve yükleme dotenv:
require('dotenv').config();
const proxyUrl = `http://${process.env.PROXY_USER}:${process.env.PROXY_PASS}@gate.proxyhat.com:8080`;Başlamaya hazır mısın? Check Check Check Check Fiyatlama planlarımız Projeniz için doğru miktarda konut bant genişliği bulmak.
Key Takeaways
- The The The The The The The The ProxyHat Node SDK proxy desteği eklemek için en hızlı yoldur. Yükleme ile birlikte yükleme
npm install proxyhatve üç kod hattında getirmeye başlayın.- Axios Referanslarla birlikte çalışır
https-proxy-agentveya SDK'nın yerleşik ajanı. Verimlilik için yeniden kullanılabilir bir Axios örneği oluşturun.- Puppeteer Rakipleri bir başlangıç argümanı olarak kabul edin. Call Call Call
page.authenticate()Güvenilirliği geçmek için.- Playwright Başlangıçta ve bağlam seçeneklerinde yerli destek var, çünkü çoklu-bölge kazıları için per-context proxylar dahil.
- Use Use Use Use Use Use yapışkan seanslar Çok adımlı akışlar ve dönen IPs Büyük ölçekli veri koleksiyonu için.
- Her zaman her zaman uygulayın Üstel backoff ile yeniden deneme mantığı ve Yeterlilik kontrolü Üretim hurdalarında.
- Çarsız tarayıcılarda bant gereksiz kaynaklar bant genişliğini azaltmak ve hız geliştirmek için.






