# Node.js'de dönen konut proxyleri: undici, axios, got ve SOCKS5

> Node.js'de dönen konut proxyleri: undici ProxyAgent fetch ile, axios ve got proxy ajanlarla, SOCKS5, ana bilgisayar başına limitler. Söz dizimi kontrol edilmiş kod.

- URL: https://crawlrelay.com/tr/docs/node/
- Son güncelleme: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

Node’nin yerleşik fetch fonksiyonu, bir dispatcher verilmediği sürece proxy ayarlarını yok sayar. İşte her kütüphane için çalışan kalıplar ve ayrıca bağımlılık gerektirmeyen ana bilgisayar başına sınırlayıcı.

**Hızlı cevap — Node.js'de dönen proxyyi nasıl kullanırım?**

fetch ile `http://gw.crawlrelay.com:7777` için bir undici `ProxyAgent` oluştur ve bunu `dispatcher` olarak geçir. axios veya got ile, `https-proxy-agent` veya `hpagent` gibi bir proxy ajan geçir ve axios'ta `proxy: false` ayarla. **CrawlRelay** konut proxyleri ülkeyi ve oturumu kullanıcı adından $0,50/GB baz alarak okur. KYC olmadan, kripto ile ödenir.

## Node.js kurulumu genel bakış

| Özellik | Değer |
| --- | --- |
| fetch / undici | `new ProxyAgent({ uri, token })`, sonra `fetch(url, { dispatcher })` |
| axios | `httpsAgent: new HttpsProxyAgent(url)` ve `proxy: false` |
| got | hpagent'den `agent: { https: new HttpsProxyAgent({ proxy }) }` |
| SOCKS5 | `socks5h://` URL ile 7778 portunda `socks-proxy-agent` |
| İstek başına yeni IP | İstek başına yeni bir agent veya yeni bir oturum kimliği; havuzdaki bağlantılar çıkışlarını korur |
| Modül formatı | Örnekler ES modülleridir (`.mjs` veya `"type": "module"`) ve top-level await içerir |

## Node'un fetch'i ile proxy nasıl kullanılır?

Node'un global `fetch`'u undici üzerine kurulu ama varsayılan olarak `HTTP_PROXY` veya `HTTPS_PROXY` okumaz. Undici yükleyin ve dispatcher olarak bir `ProxyAgent` geçin. `token` alanı, kimlik bilgilerini `Proxy-Authorization` başlığı olarak gönderir, dolayısıyla parola asla loglanabilecek bir URL içinde görünmez.

*Undici ProxyAgent ile fetch*

```javascript
import { ProxyAgent, fetch } from "undici";

const credentials = Buffer.from("USERNAME-country-us:PASSWORD").toString("base64");
const dispatcher = new ProxyAgent({
  uri: "http://gw.crawlrelay.com:7777",
  token: `Basic ${credentials}`,
});

const res = await fetch("https://api.ipify.org?format=json", {
  dispatcher,
  signal: AbortSignal.timeout(30000),
});
console.log(res.status, await res.json());
await dispatcher.close();
```

## Axios ile proxy nasıl kullanılır?

HTTPS siteleri için axios'un kendi `proxy` seçeneğine güvenmeyin: bu, isteği CONNECT tüneli olmadan proxy'ye gönderir, ki birçok proxy bunu reddeder. Bunu `proxy: false` ile kapatın ve uygun tüneli açan bir agent iletin.

*axios + https-proxy-agent*

```javascript
import axios from "axios";
import { HttpsProxyAgent } from "https-proxy-agent";

const agent = new HttpsProxyAgent("http://USERNAME-country-de:PASSWORD@gw.crawlrelay.com:7777");
const client = axios.create({ httpsAgent: agent, httpAgent: agent, proxy: false, timeout: 30000 });

const { data } = await client.get("https://api.ipify.org?format=json");
console.log(data.ip);
```

## got ile proxy nasıl kullanılır?

got her protokol için bir agent alır. hpagent, Node'un `http.Agent` politikasını takip eder: keep-alive kapalıdır, ancak `keepAlive: true` geçerseniz açılır. Her isteğin yeni bir bağlantıda olmasını istediğinizde kapalı bırakın ya da aşağıda gösterildiği gibi `keepAlive: false` ayarlayın, böylece genellikle yeni bir çıkış kullanılır.

*got + hpagent*

```javascript
import got from "got";
import { HttpsProxyAgent } from "hpagent";

const proxy = "http://USERNAME-country-fr:PASSWORD@gw.crawlrelay.com:7777";
const body = await got("https://api.ipify.org", {
  agent: { https: new HttpsProxyAgent({ proxy, keepAlive: false }) },
  timeout: { request: 30000 },
  retry: { limit: 2, statusCodes: [429, 502, 503, 504] },
}).text();
console.log(body);
```

## Node.js'te SOCKS5 nasıl kullanılır?

`socks-proxy-agent`'ı `socks5h://` şemasıyla kullanın, böylece ana bilgisayar adı çıkışta çözülür. Node'un `http` ve `https` modülleriyle ve bir agent kabul eden her kütüphane ile çalışır.

*socks-proxy-agent ile node:https*

```javascript
import https from "node:https";
import { SocksProxyAgent } from "socks-proxy-agent";

const agent = new SocksProxyAgent("socks5h://USERNAME-country-gb:PASSWORD@gw.crawlrelay.com:7778");

const req = https.get("https://api.ipify.org", { agent, timeout: 30000 }, (res) => {
  let body = "";
  res.on("data", (chunk) => (body += chunk));
  res.on("end", () => console.log(res.statusCode, body));
});
req.on("timeout", () => req.destroy(new Error("timeout after 30 s")));
req.on("error", (err) => console.error(err.code, err.message));
```

## Kitaplıksız host başına eşzamanlılığı nasıl sınırlandırırım?

10.000 URL üzerinde `Promise.all` 10.000 isteği aynı anda açar. Her host için küçük bir sınırlayıcı, her siteyi kibar bir seviyede tutar ve tarama genel olarak paralel devam eder. Aşağıdaki sürüm bağımlılıksızdır ve üstteki herhangi bir istemci ile çalışır.

*Host başına sınırlayıcı + undici*

```javascript
import { ProxyAgent, fetch } from "undici";

const PER_HOST = 4;
const active = new Map();
const waiting = new Map();
const dispatcher = new ProxyAgent("http://USERNAME-country-us:PASSWORD@gw.crawlrelay.com:7777");

async function withHostSlot(url, task) {
  const host = new URL(url).hostname;
  while ((active.get(host) ?? 0) >= PER_HOST) {
    await new Promise((resolve) => {
      if (!waiting.has(host)) waiting.set(host, []);
      waiting.get(host).push(resolve);
    });
  }
  active.set(host, (active.get(host) ?? 0) + 1);
  try {
    return await task();
  } finally {
    active.set(host, active.get(host) - 1);
    waiting.get(host)?.shift()?.();
  }
}

const urls = ["https://example.com/", "https://example.org/", "https://example.net/"];
const results = await Promise.all(
  urls.map((url) =>
    withHostSlot(url, async () => {
      const res = await fetch(url, { dispatcher, signal: AbortSignal.timeout(30000) });
      return [url, res.status, (await res.arrayBuffer()).byteLength];
    }).catch((err) => [url, err.name, 0])
  )
);
console.table(results);
await dispatcher.close();
```

## Neden aynı IP'yi iki kere alıyorum veya ECONNRESET hatası alıyorum?

Agentlar bağlantıları havuzlar ve havuzdaki bağlantı açıldığı çıkışı korur. İstek başına yeni IP için istek başına yeni bir agent oluşturup sonra kapatın, agent içinde keep-alive'ı kapatın veya her isteğin kullanıcı adında benzersiz bir `-session-<id>` kullanın.

`ECONNRESET` ve `socket hang up` genelde karşı tarafın kapattığı havuzdaki bir soketin tekrar kullanılmasından ya da bağlantının düştüğü bir çıkıştan kaynaklanır. GET isteklerini yeni bağlantıda bir kere yeniden deneyin. [connection reset sayfası](https://crawlrelay.com/tr/docs/errors/connection-reset/) detayları açıklar.

## Node.js ve proxyler: sorular

### Node.js fetch HTTP_PROXY destekliyor mu?

Bugünün çoğu projede kullanılan sürümlerde varsayılan olarak hayır: global fetch proxy ortam değişkenlerini görmezden gelir, dispatcher geçilmedikçe. Yukarıda gösterildiği gibi undici `ProxyAgent` kullanın veya süreçteki her istek proxyyi kullanmalıysa undici'nin `setGlobalDispatcher()` ile global dispatcher ayarlayın.

### Neden axios proxy arkasındaki HTTPS sitelerinde hata verir?

Axios'un yerleşik `proxy` seçeneği HTTPS isteklerini birçok proxy'nin reddettiği biçimde proxyye yollar, CONNECT tüneli açmaz. `proxy: false` ayarlayın ve `HttpsProxyAgent`'yi `httpsAgent` olarak geçin. Böylece istek düzgün bir tünel üzerinden gider ve TLS sadece sizin kodunuz ve site arasında olur.

### Tek bir Node.js işleminden farklı ülkeler nasıl gönderirim?

Her ülke için kendi kullanıcı adıyla (örneğin `USERNAME-country-de` veya `USERNAME-country-jp`) bir agent oluşturun ve isteğe göre agent seçin. Agentlar ucuzdur, onları ayrı tutmak bağlantı havuzlarını ve dolayısıyla çıkışlarını da ayırır.

### Node.js’te hangi zaman aşımını ayarlamalıyım?

Her zaman bir tane ayarlayın: fetch için `AbortSignal.timeout(30000)`, axios için `timeout: 30000`, got için `timeout: { request: 30000 }`. Otuz saniye HTML sayfalar için uygundur; yavaş hedefler ve mobil çıkışlar için 60 saniye verin ve daha uzun beklemek yerine yeni bağlantıda bir kere yeniden deneyin.

**Node.js tarayıcınızı bağlayın** $5,94, 50 GB üzerinden 10 GB, $0,50/GB. [Fiyatları gör](https://crawlrelay.com/tr/pricing/) · [Puppeteer kılavuzu](https://crawlrelay.com/tr/docs/puppeteer/)

---

CrawlRelay: CrawlRelay, kazıyıcılar ve AI veri hatları için geliştirici odaklı dönen konut proxy ve 4G/5G mobil proxy hizmetidir: süresiz, kullanılan kadar ödenen trafik $0,50/GB'dan itibaren, kripto ile ödenir, kimlik yüklemesi yoktur. KYC yok — kimlik, selfie veya belge istemez. Kripto ile ödeyin.
