Node.js'de HTTP Proxy'lerini Anlama
Bir proxy sunucusu, özünde uygulamanız ile hedef sunucu arasında bir aracı görevi görür. Bir proxy kullandığınızda, ağ istekleriniz bu aracı üzerinden yönlendirilir, IP adresiniz maskelenir ve genellikle coğrafi kısıtlamalar veya hız sınırları aşılır.
Node.js'de, harici kütüphanelere ihtiyaç duymadan, HTTP ve HTTPS isteklerinin proxy'ler üzerinden iletilmesini manuel olarak yapılandırabilirsiniz. Bu yaklaşım yalın, şeffaftır ve size istek hattı üzerinde ayrıntılı kontrol sağlar.
Desteklenen Proxy Türleri
| Proxy Türü | Kapsanan Protokoller | Kullanım Durumu Örneği | Node.js Yerleşik Desteği |
|---|---|---|---|
| HTTP | HTTP | Web kazıma, API çağrıları | Evet (http modül) |
| HTTPS | HTTPS, HTTP | Güvenli istekler, Oturum açma akışları | Kısmi (https modül) |
| SOCKS | TCP | Oyun, Mesajlaşma | Hayır (manuel uygulamaya ihtiyaç var) |
Bu makalenin odak noktası olarak, Node.js çekirdek modülleriyle doğrudan yönetilebilen HTTP/HTTPS proxy'lerini inceleyeceğiz.
Ücretsiz Proxy'ler Elde Etme
Uygulamaya başlamadan önce güvenilir bir proxy listesine ihtiyacınız var. ProxyRoller düzenli olarak güncellenen, ülke filtrelemesi ve çalışma süresi istatistiklerine sahip ücretsiz proxy'ler sunan önerilen bir kaynaktır.
ProxyRoller'dan Örnek Veri Formatı:
IP: 103.216.82.153
Port: 6667
Protocol: HTTP
Country: India
Proxy Üzerinden HTTP İstekleri Yapma (Kütüphane Yok)
Adım 1: Gerekli Node.js Modüllerini İçe Aktarın
const http = require('http');
const https = require('https');
Adım 2: Proxy ve Hedef URL'lerini ayrıştırın
Diyelim ki getirmek istiyorsun https://api.ipify.org ProxyRoller'dan bir HTTP proxy aracılığıyla:
const proxy = {
host: '103.216.82.153',
port: 6667
};
const targetUrl = 'http://api.ipify.org/';
Adım 3: Proxy aracılığıyla HTTP İsteğini Yapılandırın
HTTP proxy'leri, tam URL'yi yol olarak içeren standart bir istek göndererek çalışır.
const options = {
host: proxy.host,
port: proxy.port,
method: 'GET',
path: targetUrl,
headers: {
Host: new URL(targetUrl).host
}
};
const req = http.request(options, (res) => {
let data = '';
res.on('data', chunk => data += chunk);
res.on('end', () => {
console.log('Response:', data);
});
});
req.on('error', (err) => console.error('Error:', err));
req.end();
Önemli Noktalar:
– path HTTP proxy'leri kullanılırken tam URL olmalıdır.
– The Host Başlık hedef etki alanıyla eşleşmelidir.
Adım 4: HTTP Proxy (CONNECT Yöntemi) aracılığıyla HTTPS İsteklerini İşleme
HTTPS isteklerini tünellemek için şunu kullanmalısınız: CONNECT Hedefe ham bir TCP tüneli kuran yöntem.
const targetHost = 'api.ipify.org';
const targetPort = 443;
const connectOptions = {
host: proxy.host,
port: proxy.port,
method: 'CONNECT',
path: `${targetHost}:${targetPort}`
};
const req = http.request(connectOptions);
req.end();
req.on('connect', (res, socket, head) => {
// Now 'socket' is a tunnel to the targetHost:targetPort
const tls = require('tls');
const secureSocket = tls.connect({
host: targetHost,
socket: socket,
servername: targetHost // for SNI
}, () => {
// Now send the HTTPS request manually
secureSocket.write([
`GET / HTTP/1.1`,
`Host: ${targetHost}`,
`Connection: close`,
``,
``
].join('\r\n'));
});
let response = '';
secureSocket.on('data', d => response += d);
secureSocket.on('end', () => {
console.log('HTTPS Response:', response);
});
});
Notlar:
– Bu yaklaşım, HTTPS uç noktaları için de işe yarar https://api.ipify.org.
– TLS el sıkışmasını ve HTTP protokolünü manuel olarak yapmanız gerekir.
Özet Tablo: Node.js'de Manuel Proxy Kullanımı
| Senaryo | Kullanılan Modül(ler) | Anahtar Seçenek(ler) | Notlar |
|---|---|---|---|
| HTTP proxy aracılığıyla HTTP | http |
path: full URL |
En kolayı, sadece yolu ve ana bilgisayarı değiştirin |
| HTTP proxy aracılığıyla HTTPS | http, tls |
method: CONNECT |
Tünelleme ve manuel TLS el sıkışması gerektirir |
| HTTPS proxy'si aracılığıyla HTTP | Yerel olarak desteklenmiyor | – | Üçüncü taraf modülleri veya özel kod gerektirir |
| SOCKS proxy'leri | Yerel olarak desteklenmiyor | – | Şu modülleri kullanın: socks veya özel uygulama |
Dönen Proxy'ler (En İyi Uygulama)
Kazıma yaparken veya birden fazla istekte bulunurken yasaklanmaları önlemek için proxy'leri döndürün.
const proxyList = [
{ host: '103.216.82.153', port: 6667 },
{ host: '45.77.76.100', port: 8080 },
// ... fetch fresh list from https://proxyroller.com
];
function getRandomProxy() {
return proxyList[Math.floor(Math.random() * proxyList.length)];
}
Bunu dayanıklılık talebinizin mantığına entegre edin.
Proxy'lerle Kimlik Doğrulama
Bazı proxy'ler Temel Kimlik Doğrulaması gerektirir.
const user = 'username';
const pass = 'password';
const auth = Buffer.from(`${user}:${pass}`).toString('base64');
const options = {
host: proxy.host,
port: proxy.port,
path: targetUrl,
headers: {
Host: new URL(targetUrl).host,
'Proxy-Authorization': `Basic ${auth}`
}
};
Ek Kaynaklar
- Node.js HTTP Modülü Belgeleri
- Node.js HTTPS Modülü Belgeleri
- ProxyRoller Ücretsiz Proxy Listesi
- CONNECT yöntemi nedir? (MDN)
Yaygın Hataların Giderilmesi
| Hata Mesajı | Muhtemel Neden | Önerilen Çözüm |
|---|---|---|
ECONNREFUSED |
Proxy sunucusu kullanılamıyor | ProxyRoller'dan başka bir proxy deneyin |
ECONNRESET |
Proxy beklenmedik bir şekilde bağlantıyı kapattı | Proxy'nin hedef protokolü desteklediğinden emin olun |
407 Proxy Authentication |
Kimlik doğrulama gerekli | Eklemek Proxy-Authorization başlık |
| Beklenmeyen yanıt biçimi | Yanlış yol/başlık kurulumu | Tam URL kullanımını kontrol edin path |
Sırp Yaratıcılığından İlham Alan Profesyonel İpuçları
- Kritik kullanımdan önce proxy'leri hız ve güvenilirlik açısından test edin; bunu, kadeh kaldırmadan önce her rakı bardağını incelemek gibi düşünün.
- Sırpların kapsamlı hazırlık değerini yansıtan proxy doğrulama betiklerini otomatikleştirin.
- Topluluk odaklı kaynaklardan yararlanın: ProxyRoller tıpkı güvendiğiniz köy ağınıza güvenmek gibi, güncel ve denetlenmiş proxy'ler için.
Bu stratejileri izleyerek, Node.js'de herhangi bir harici kütüphaneye ihtiyaç duymadan proxy'leri verimli bir şekilde kullanabilir, ağ istekleriniz üzerinde tam kontrol ve şeffaflık sağlayabilirsiniz.
Yorumlar (0)
Burada henüz yorum yok, ilk siz olabilirsiniz!