HTTP proxy, Node.js uygulamanız ile hedef sunucu arasında yer alan ve istekleri ile yanıtları ileten aracı bir sunucudur. Node.js'te axios, Puppeteer ve Playwright gibi kütüphanelerle proxy kullanmak; IP adresinizi gizlemenizi, coğrafi kısıtlamaları aşmanızı, istekleri yük dengelemenizi ve web scraping işlerini daha etkili yürütmenizi sağlar. Bu makale, bu kütüphaneleri proxy kullanacak şekilde yapılandırmaya dair pratik örnekler sunar.
Axios ile proxy yapılandırma
Axios, Node.js için yaygın kullanılan promise tabanlı bir HTTP istemcisidir. Axios'ta proxy yapılandırmak, proxy yapılandırma seçeneğiyle oldukça basittir.
Temel proxy yapılandırması
proxy seçeneği; host, port, username ve password gibi özellikleri olan bir nesne alır.
const axios = require('axios');
async function fetchData() {
try {
const response = await axios.get('https://api.example.com/data', {
proxy: {
host: 'your_proxy_host',
port: 8080,
username: 'your_username', // İsteğe bağlı
password: 'your_password' // İsteğe bağlı
}
});
console.log(response.data);
} catch (error) {
console.error('Error fetching data:', error);
}
}
fetchData();
your_proxy_host ve 8080 değerlerini kendi proxy host ve port bilgilerinizle değiştirin. Proxy'niz kimlik doğrulama gerektiriyorsa username ve password alanlarını doldurun.
Ortam değişkenlerini kullanma
Güvenlik ve sürdürülebilirlik açısından proxy kimlik bilgilerini ortam değişkenlerinde saklamak en iyisidir.
const axios = require('axios');
async function fetchData() {
try {
const proxyHost = process.env.PROXY_HOST;
const proxyPort = process.env.PROXY_PORT;
const proxyUsername = process.env.PROXY_USERNAME;
const proxyPassword = process.env.PROXY_PASSWORD;
const response = await axios.get('https://api.example.com/data', {
proxy: {
host: proxyHost,
port: parseInt(proxyPort), // Portun tam sayı olduğundan emin ol
username: proxyUsername,
password: proxyPassword
}
});
console.log(response.data);
} catch (error) {
console.error('Error fetching data:', error);
}
}
fetchData();
Betiği çalıştırmadan önce ortam değişkenlerini ayarladığınızdan emin olun. Örneğin terminalinizde:
export PROXY_HOST=your_proxy_host
export PROXY_PORT=8080
export PROXY_USERNAME=your_username
export PROXY_PASSWORD=your_password
node your_script.js
HTTPS proxy'leriyle çalışma
HTTPS proxy'leri için proxy'nizin CONNECT yöntemini desteklediğinden emin olun. Axios, HTTPS proxy'lerini aynı yapılandırmayla sorunsuz şekilde ele alır.
Puppeteer ile proxy yapılandırma
Puppeteer, headless Chrome veya Chromium'u kontrol etmek için üst düzey bir API sunan bir Node.js kütüphanesidir. IP banlarından kaçınmanız veya coğrafi kısıtlı içeriğe erişmeniz gereken web scraping ve otomasyon işlerinde Puppeteer ile proxy kullanmak kritik önemdedir.
Puppeteer'ı proxy ile başlatma
Puppeteer'ı başlatırken --proxy-server başlatma argümanını kullanarak bir proxy yapılandırabilirsiniz.
const puppeteer = require('puppeteer');
async function scrapeWebsite() {
const browser = await puppeteer.launch({
args: [
`--proxy-server=http://${process.env.PROXY_HOST}:${process.env.PROXY_PORT}`
]
});
const page = await browser.newPage();
await page.goto('https://www.example.com');
console.log(await page.title());
await browser.close();
}
scrapeWebsite();
process.env.PROXY_HOST ve process.env.PROXY_PORT değerlerini kendi proxy host ve port bilgilerinizle değiştirin. Bu örneğin bir HTTP proxy varsaydığını unutmayın; HTTPS proxy'leri için --proxy-server argümanında https:// kullanın.
Puppeteer ile kimlik doğrulamalı proxy'ler
Puppeteer, başlatma argümanları üzerinden kullanıcı adı ve parola ile kimlik doğrulamayı doğrudan desteklemez. Kimlik doğrulamayı sayfa bağlamında yapmanız gerekir.
const puppeteer = require('puppeteer');
async function scrapeWebsite() {
const browser = await puppeteer.launch({
args: [
`--proxy-server=http://${process.env.PROXY_HOST}:${process.env.PROXY_PORT}`
]
});
const page = await browser.newPage();
// page.authenticate ile proxy'de kimlik doğrula
await page.authenticate({
username: process.env.PROXY_USERNAME,
password: process.env.PROXY_PASSWORD,
});
await page.goto('https://www.example.com');
console.log(await page.title());
await browser.close();
}
scrapeWebsite();
page.authenticate() yöntemi, gerekli kimlik bilgilerini proxy sunucusuna iletir. Bu yöntem, hedef sayfaya gitmeden önce çağrılmalıdır.
İstek başına proxy hakkında notlar
Puppeteer, proxy ayarını tüm tarayıcı örneği için global olarak uygular. Farklı istekler için farklı proxy'ler gerekiyorsa, her biri farklı bir proxy ile yapılandırılmış birden fazla tarayıcı örneği başlatmanız gerekir. Alternatif olarak, istekleri yakalayıp proxy ayarlarını istek bazında uygulayan bir kütüphane kullanmayı değerlendirebilirsiniz (daha az yaygın, daha karmaşık).
Playwright ile proxy yapılandırma
Playwright, tarayıcı otomasyonu ve uçtan uca test için güçlü bir başka Node.js kütüphanesidir. Puppeteer gibi o da tarayıcı örnekleri için proxy yapılandırmayı destekler.
Playwright'ı proxy ile başlatma
Playwright, launch seçeneklerindeki proxy özelliğini kullanarak Puppeteer'a kıyasla daha doğrudan bir proxy yapılandırma yolu sunar.
const { chromium } = require('playwright');
async function scrapeWebsite() {
const browser = await chromium.launch({
proxy: {
server: `http://${process.env.PROXY_HOST}:${process.env.PROXY_PORT}`,
username: process.env.PROXY_USERNAME,
password: process.env.PROXY_PASSWORD,
}
});
const page = await browser.newPage();
await page.goto('https://www.example.com');
console.log(await page.title());
await browser.close();
}
scrapeWebsite();
Bu yaklaşım daha temiz ve açıktır; çünkü kullanıcı adı ve parola ile kimlik doğrulamayı doğrudan proxy yapılandırmasının içinde destekler.
Bağlam başına proxy
Playwright, tek bir tarayıcı örneği içinde izole gezinme oturumlarına imkân veren tarayıcı bağlamlarını (context) destekler. Her bağlamın kendi proxy yapılandırması olabilir. Bu, her biri farklı bir proxy kullanan paralel görevleri çalıştırmak için kullanışlıdır.
const { chromium } = require('playwright');
async function scrapeWebsite() {
const browser = await chromium.launch();
const context = await browser.newContext({
proxy: {
server: `http://${process.env.PROXY_HOST}:${process.env.PROXY_PORT}`,
username: process.env.PROXY_USERNAME,
password: process.env.PROXY_PASSWORD,
}
});
const page = await context.newPage();
await page.goto('https://www.example.com');
console.log(await page.title());
await browser.close();
}
scrapeWebsite();
Karşılaştırma tablosu: proxy yapılandırması
| Özellik | Axios | Puppeteer | Playwright |
|---|---|---|---|
| Yapılandırma | İstek yapılandırmasında proxy seçeneği |
--proxy-server başlatma argümanı, page.authenticate() |
launch veya newContext içinde proxy seçeneği |
| Kimlik doğrulama | proxy içinde username ve password |
page.authenticate() |
proxy içinde username ve password |
| HTTPS desteği | Evet, HTTP ile aynı yapılandırma | Evet, --proxy-server içinde https:// kullanın |
Evet, HTTP ile aynı yapılandırma |
| İstek başına proxy | Hayır, Axios örneği için global | Hayır, tarayıcı örneği için global | Evet, tarayıcı bağlamlarıyla |
En iyi uygulamalar
- Ortam değişkenleri kullanın: Proxy kimlik bilgilerini kodun içine gömmemek için ortam değişkenlerinde saklayın.
- Hataları ele alın: Proxy bağlantı sorunlarını düzgün yönetmek için hata yakalama uygulayın.
- Proxy rotasyonu yapın: Web scraping'de IP banlarından kaçınmak için proxy'leri sık sık değiştirin. Bir proxy havuzu kullanmayı değerlendirin.
- Kurulumunuzu test edin: Proxy üzerinden IP adresinizi kontrol ederek proxy'nin doğru çalıştığını doğrulayın. whatismyipaddress.com gibi siteleri kullanabilirsiniz.
- Güvenli proxy'ler kullanın: Trafiğinizi şifrelemek için güvenli proxy'ler (HTTPS veya SOCKS5) tercih edin.
- Hukuki hususlar: Web scraping faaliyetlerinizin hedef sitenin hizmet şartlarına ve geçerli tüm yasalara uygun olduğundan emin olun.
Sonuç
Node.js'te axios, Puppeteer ve Playwright gibi kütüphanelerle proxy yapılandırmak; web scraping, coğrafi kısıtlamaları aşma ve gizliliği artırma gibi çeşitli işler için gereklidir. Her kütüphane proxy yapılandırmasına farklı yaklaşır; özellikle kimlik doğrulamalı proxy'ler ve bağlam başına yapılandırmalar söz konusu olduğunda en esnek ve doğrudan yöntemi Playwright sunar. Bu makaledeki en iyi uygulamaları izleyerek Node.js uygulamalarınızda proxy'leri etkili biçimde kullanabilirsiniz.
