Node.js-এ proxy কনফিগারেশন: axios, got, fetch এবং undici (২০২৬ গাইড)

6 জুন 2026 প্রকাশিত · ≈10 মিনিট পড়া

প্রতিটি Node.js HTTP ক্লায়েন্ট proxy ভিন্নভাবে সামলায়, এবং তাদের অর্ধেক একটি helper প্যাকেজ ছাড়া proxy authentication মোটেও সামলায় না। axios কিছু সংস্করণে HTTPS টার্গেটের জন্য তার নিজের proxy অপশন নীরবে উপেক্ষা করে, native fetch-এর কোনো proxy অপশনই নেই, এবং error বার্তাগুলো — ECONNRESET, 407, বা শুধু একটি hang — আপনাকে কিছুই বলে না।

এটি হলো axios, got, node-fetch, native fetch (undici), এবং superagent-কে authenticated residential proxy-এর মাধ্যমে রুট করার সম্পূর্ণ, কার্যকর রেফারেন্স। এটি আমাদের Python গাইডগুলোর (requests/httpx/aiohttp, Scrapy) Node সঙ্গী। সমস্ত উদাহরণ স্ট্যান্ডার্ড placeholder ফরম্যাট ব্যবহার করে — আপনার আসল credential বসিয়ে দিন:

socks5h://USERNAME:[email protected]:913

একটি নিয়ম যা বেশিরভাগ বাগ প্রতিরোধ করে

বিল্ট-ইন proxy অপশন ব্যবহার করবেন না। একটি proxy agent ব্যবহার করুন। Node-এর HTTP ক্লায়েন্টগুলো সংযোগ পরিচালনা একটি "agent" অবজেক্টের কাছে অর্পণ করে, এবং agent প্যাকেজগুলো (https-proxy-agent, socks-proxy-agent) CONNECT tunneling এবং authentication সঠিকভাবে বাস্তবায়ন করে। বিল্ট-ইন অপশনগুলো প্রায়ই করে না — axios-এর proxy config সবচেয়ে কুখ্যাত উদাহরণ।

npm install socks-proxy-agent https-proxy-agent

axios

const axios = require("axios");
const { SocksProxyAgent } = require("socks-proxy-agent");

const agent = new SocksProxyAgent(
  "socks5h://USERNAME:[email protected]:913"
);

const res = await axios.get("https://api.ipify.org?format=json", {
  httpAgent: agent,    // for http:// targets
  httpsAgent: agent,   // for https:// targets
  proxy: false,        // IMPORTANT: disable axios's own proxy handling
});
console.log(res.data); // -> the proxy's exit IP

দুটি জিনিস মানুষ মিস করে: আপনাকে উভয় httpAgent এবং httpsAgent সেট করতে হবে (axios টার্গেট স্কিম অনুযায়ী বেছে নেয়), এবং আপনাকে proxy: false সেট করতে হবে যাতে axios আপনার agent-এর উপরে HTTP_PROXY environment variable-ও প্রয়োগ করার চেষ্টা না করে।

got

const got = require("got");
const { SocksProxyAgent } = require("socks-proxy-agent");

const agent = new SocksProxyAgent(
  "socks5h://USERNAME:[email protected]:913"
);

const body = await got("https://api.ipify.org?format=json", {
  agent: { http: agent, https: agent },
}).json();

আপনি যদি got দিয়ে সুরক্ষিত টার্গেট scrape করেন, পরিবর্তে got-scraping দেখুন — একই API, প্লাস ব্রাউজারের মতো header তৈরি এবং HTTP/2 fingerprint অনুকরণ (কেন এটি গুরুত্বপূর্ণ: JA3/JA4 ব্যাখ্যা)।

Native fetch / undici (Node 18+)

Node-এর বিল্ট-ইন fetch undici থেকে আসে, proxy environment variable উপেক্ষা করে, এবং কোনো agent অপশন নেই। undici-এর উপায় হলো একটি dispatcher:

const { ProxyAgent } = require("undici");

// undici's ProxyAgent speaks HTTP CONNECT (use your HTTP proxy port)
const dispatcher = new ProxyAgent({
  uri: "http://us.jibaoproxy.com:1000",
  token: "Basic " + Buffer.from("USERNAME:PASSWORD").toString("base64"),
});

const res = await fetch("https://api.ipify.org?format=json", { dispatcher });
console.log(await res.json());

নোট: undici-এর ProxyAgent কেবল HTTP-proxy। native fetch দিয়ে SOCKS5-এর জন্য, হয় এটিকে একটি local forwarder দিয়ে সামনে রাখুন অথবা socks agent গ্রহণ করে এমন একটি ক্লায়েন্ট ব্যবহার করুন (উপরের axios/got)।

node-fetch (v2/v3)

const fetch = require("node-fetch");
const { SocksProxyAgent } = require("socks-proxy-agent");

const agent = new SocksProxyAgent(
  "socks5h://USERNAME:[email protected]:913"
);

const res = await fetch("https://api.ipify.org?format=json", { agent });

Rotation: প্রতি request-এ নতুন পরিচয় বনাম Sticky Session

একটি rotating residential gateway দিয়ে আপনি IP তালিকা পরিচালনা করেন না — gateway আপনাকে প্রতি সংযোগে একটি নতুন exit দেয়, বা প্রতি session id-এ একটি exit ধরে রাখে। Node-এ এটি পরিষ্কারভাবে প্রতি পরিচয়ে একটি agent-এ ম্যাপ করে:

// Sticky: same session id -> same exit IP across requests
function identityAgent(sessionId) {
  return new SocksProxyAgent(
    `socks5h://USERNAME-session-${sessionId}:[email protected]:913`
  );
}

// Account A keeps IP A, account B keeps IP B - cookies and IP move together
const agentA = identityAgent("acct_a");
const agentB = identityAgent("acct_b");

একটি পরিচয়ের মধ্যে connection pooling-এর জন্য agent পুনর্ব্যবহার করুন; কখনও একটি agent একাধিক পরিচয়ের জুড়ে শেয়ার করবেন না। কখন rotate করবেন বনাম stick করবেন তা তার নিজস্ব বিষয় — sticky বনাম rotating sessions দেখুন।

Troubleshooting টেবিল

লক্ষণকারণসমাধান
407 Proxy Authentication RequiredCredential proxy-তে পৌঁছাচ্ছে নাuser:pass agent URL-এ রাখুন, ক্লায়েন্ট config-এ নয়
axios http://-এ কাজ করে, https://-এ ব্যর্থ হয়কেবল httpAgent সেট করাhttpsAgent-ও সেট করুন, এবং proxy: false
তাৎক্ষণিক ECONNRESETভুল port / ভুল প্রোটোকল (SOCKS agent সহ HTTP port)agent ধরনকে port-এর সাথে মেলান
DNS leak / অভ্যন্তরীণ hostname ব্যর্থ হয়socks5:// DNS স্থানীয়ভাবে resolve করেsocks5h:// ব্যবহার করুন — h hostname proxy-এর মাধ্যমে পাঠায়
Native fetch HTTP_PROXY উপেক্ষা করেundici env var পড়ে নাএকটি dispatcher স্পষ্টভাবে পাস করুন
স্থানীয়ভাবে কাজ করে, টার্গেট সাইটে 403proxy বাগ নয় — TLS fingerprintgot-scraping বা একটি আসল ব্রাউজার; TLS গাইড দেখুন
বিনামূল্যের টুল · সাইনআপ নেই

আপনার কোড ডিবাগ করার আগে আপনার proxy যাচাই করুন

"আমার Node proxy কোড ভাঙা"-র অর্ধেক আসলে একটি মৃত বা ভুল-কনফিগার করা proxy। আমাদের checker-এ আপনার proxy URL পেস্ট করুন — এটি একবারে connectivity, auth, exit IP, এবং latency পরীক্ষা করে।

আমার proxy পরীক্ষা করুন →

reputation পরীক্ষাও উত্তীর্ণ হয় এমন IP দরকার? 500MB ফ্রি ট্রাফিক সহ residential proxy পান →

সারসংক্ষেপ

Node.js-এর জন্য Residential Proxy

SOCKS5 + HTTP endpoint, sticky বা rotating, প্রতি-GB মূল্য — 500MB ফ্রি ট্রাফিক, কোনো কার্ড প্রয়োজন নেই।

বিনামূল্যে ট্রায়াল শুরু করুন

সকল IP পণ্যের জন্য · যেকোনো সময় উপলব্ধ বিশাল নোড পুল

এখনই নিবন্ধন করুন এবং আপনার রিচার্জে ১০০% পর্যন্ত ফেরত পান

নতুন ব্যবহারকারীরা নিবন্ধনের সময় 500MB পান, সাথে প্রথম রিচার্জে বোনাস। সীমিত সময়ের অফার।