- 3 Aylık1.545 ₺
- 6 Aylık2.850 ₺
- 12 Aylık4.999 ₺
API ve Otomasyon Projelerinde Proxy Kullanımı
Kodunuzun proxy üzerinden güvenilir biçimde çalışması için yalnız adres girmek yetmez: zaman aşımı, yeniden deneme, backoff ve havuz yönetimi de doğru kurulmalıdır. Bu sayfa doğrudan kopyalanabilir örnekler sunar.
- Python ve Node.js örnekleri
- Backoff ve Retry-After
- Havuz yönetimi
Otomasyonda proxy neden ayrı bir mühendislik konusu?
Tarayıcıda proxy kullanmak tek bir ayar alanından ibarettir. Kodda ise her isteğin hangi çıkıştan gideceği, bir çıkış başarısız olduğunda ne yapılacağı ve hedef sunucu yavaşla dediğinde nasıl bekleneceği sizin sorumluluğunuzdadır. Bu kararlar doğru verilmediğinde betik ya gereksiz yere başarısız olur ya da hedef sistemi gereğinden fazla yükler.
İyi bir proxy istemcisinin dört temel parçası vardır: makul zaman aşımları, yalnız geçici hatalarda yapılan sınırlı sayıda yeniden deneme, denemeler arasında giderek artan bekleme süresi ve birden fazla proxy varsa bunlar arasında kontrollü geçiş. Aşağıdaki örnekler bu dört parçayı içerir.
Bir de gözlemlenebilirlik vardır. Her isteğin hangi proxy'den gittiğini, kaç kez yeniden denendiğini ve hangi yanıt koduyla sonuçlandığını kaydetmek, sorunlu bir çıkışı hızla ayırmanızı sağlar. Basit bir günlük satırı bile, “betik neden yavaşladı” sorusunun cevabını tahmin etmek yerine ölçmenize imkân verir. Kimlik bilgilerini günlüğe yazmamaya dikkat edin; proxy adresini kullanıcı adı ve şifre olmadan kaydetmek yeterlidir.
Python: requests ile havuz ve yeniden deneme
urllib3'ün Retry sınıfı 429 ve 5xx yanıtlarında üstel bekleme uygular, Retry-After başlığına uyar. Bir proxy tamamen yanıt vermezse sıradaki oturuma geçilir.
import random
import time
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
# Müşteri panelindeki bağlantı bilgileri (örnek değerler)
PROXY_HAVUZU = [
"http://kullanici:sifre@proxy.example.com:8000",
"http://kullanici:sifre@proxy.example.com:8001",
"http://kullanici:sifre@proxy.example.com:8002",
]
def oturum_olustur(proxy_url):
yeniden_dene = Retry(
total=4,
backoff_factor=1.5, # 1.5 sn, 3 sn, 6 sn ... bekler
status_forcelist=[429, 500, 502, 503, 504],
allowed_methods=["GET", "HEAD"],
respect_retry_after_header=True,
)
oturum = requests.Session()
adaptor = HTTPAdapter(max_retries=yeniden_dene)
oturum.mount("http://", adaptor)
oturum.mount("https://", adaptor)
oturum.proxies = {"http": proxy_url, "https": proxy_url}
return oturum
OTURUMLAR = [oturum_olustur(p) for p in PROXY_HAVUZU]
def getir(url):
# Havuzdaki oturumları karıştırıp sırayla dener
for oturum in random.sample(OTURUMLAR, k=len(OTURUMLAR)):
try:
yanit = oturum.get(url, timeout=(5, 20))
yanit.raise_for_status()
return yanit
except requests.RequestException as hata:
print("Proxy başarısız, sıradakine geçiliyor:", hata)
time.sleep(2)
raise RuntimeError("Havuzdaki tüm proxy'ler başarısız oldu")
if __name__ == "__main__":
print(getir("https://httpbin.org/ip").json())Örnek, urllib3 1.26 ve üzeri sürümlerde çalışır. Kimlik bilgilerini kod yerine ortam değişkeninden okumanızı öneririz.
Node.js: undici ve axios ile proxy
undici, Node.js'in yerleşik fetch altyapısıdır; ProxyAgent ile istek başına proxy tanımlanır. axios kullanan projelerde https-proxy-agent paketi en sorunsuz yoldur.
// npm install undici
const { ProxyAgent, fetch } = require('undici');
const kimlik = Buffer.from('kullanici:sifre').toString('base64');
const ajan = new ProxyAgent({
uri: 'http://proxy.example.com:8000',
token: 'Basic ' + kimlik,
});
const bekle = (ms) => new Promise((r) => setTimeout(r, ms));
async function getir(url, deneme = 0) {
const yanit = await fetch(url, { dispatcher: ajan });
if ((yanit.status === 429 || yanit.status >= 500) && deneme < 4) {
const retryAfter = Number(yanit.headers.get('retry-after'));
const gecikme = retryAfter > 0 ? retryAfter * 1000 : 1000 * 2 ** deneme;
await bekle(gecikme + Math.random() * 500); // jitter ekle
return getir(url, deneme + 1);
}
return yanit;
}
getir('https://httpbin.org/ip')
.then((r) => r.json())
.then(console.log)
.catch(console.error);// npm install axios https-proxy-agent
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');
const ajan = new HttpsProxyAgent('http://kullanici:sifre@proxy.example.com:8000');
const istemci = axios.create({
httpsAgent: ajan,
proxy: false, // axios'un yerleşik proxy mantığını kapatır
timeout: 20000,
});
istemci.get('https://httpbin.org/ip')
.then((yanit) => console.log(yanit.data))
.catch((hata) => console.error(hata.message));axios ile HTTPS hedeflerine HTTP proxy üzerinden giderken yerleşik proxy seçeneği yerine ajan kullanmak, CONNECT tünelinin doğru kurulmasını sağlar.
Hangi otomasyon için hangi proxy?
| İş türü | Önerilen ürün | Neden |
|---|---|---|
| Kayıtlı API anahtarıyla entegrasyon | Statik ISP veya datacenter | Kota anahtara bağlıdır; sabit IP whitelist ve kayıt takibini kolaylaştırır |
| Oturumsuz, çok sayıda sayfa okuma | Rotating residential | Yük farklı çıkışlara dağılır |
| Çok adımlı form veya sepet akışı | Residential sticky oturum | Akış boyunca aynı IP korunur |
| Mobil uygulama API testleri | Mobil TR veya rotating mobil | Operatör ağı koşulları test edilir |
| Yüksek hacimli sürekli trafik | Sınırsız residential | Plan adındaki hız kademesiyle kota yerine bant genişliği |
Sık görülen hatalar
Otomasyon projeleri için paketler
API entegrasyonları için statik ISP, sayfa okuma ağırlıklı işler için GB kotalı residential paketler.
- 3 Aylık2.750 ₺
- 6 Aylık5.000 ₺
- 12 Aylık9.250 ₺
Sipariş, müşteri panelinde (Türkçe arayüz) tamamlanır. Fiyatlara vergiler dahil değildir; tutarlar 3 Kasım 2026 itibarıyla panelle eşleştirilmiştir. Yardım için WhatsApp.
Otomasyon yaptığınız hizmetin API koşullarına, hız sınırlarına ve kişisel veri mevzuatına uymak kullanıcının sorumluluğundadır. Örnek kodlar eğitim amaçlıdır; üretime almadan önce kendi ortamınızda gözden geçirin.
Sıkça Sorulan Sorular
Proxy havuzunu rastgele mi sırayla mı kullanmalıyım?
Bağımsız isteklerde rastgele seçim yükü dengeli dağıtır. Bir oturum boyunca aynı IP gerekiyorsa, oturumu belirli bir proxy'ye sabitleyin ve yalnız o proxy başarısız olduğunda değiştirin.
Üstel backoff neden gerekli?
Hedef sunucu yoğun olduğunda tüm istemcilerin aynı anda yeniden denemesi yükü daha da artırır. Bekleme süresini her denemede katlamak ve küçük bir rastgele gecikme eklemek, yükün zamana yayılmasını sağlar.
Proxy kimlik bilgilerini kodda tutabilir miyim?
Önermiyoruz. Ortam değişkeni, gizli anahtar deposu veya .env dosyası kullanın ve bu dosyayı sürüm kontrolüne eklemeyin.
Rotating proxy kullanırken çerezler sorun olur mu?
Aynı oturum içinde IP değişirken çerezleri korumak bazı sitelerde tutarsızlık yaratır. Oturum gerektiren akışlarda sticky oturum, bağımsız isteklerde çerezsiz istemci kullanın.
IP whitelist mi kullanıcı adı-şifre mi?
Sunucunuzun genel IP'si sabitse whitelist, kodda kimlik bilgisi taşımamanın pratik bir yoludur. Değişken IP'li ortamlarda veya dizüstü bilgisayarlarda kullanıcı adı-şifre daha esnektir.
Örnek kodlarda neden httpbin.org kullanılıyor?
httpbin.org/ip, isteğin hangi IP'den geldiğini döndüren herkese açık bir test uç noktasıdır. Proxy'nin devrede olduğunu doğrulamak için kullanışlıdır; kendi testlerinizde dilerseniz IP adresim aracımızı da kullanabilirsiniz.
Bunlar da işinize yarayabilir
Doğru proxy ile hemen başlayın
Paketleri karşılaştırın, ihtiyacınıza uygun olanı seçin. Kararsız kaldığınız noktada WhatsApp üzerinden sorabilirsiniz.