প্রতিটি 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
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-ও প্রয়োগ করার চেষ্টা না করে।
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 ব্যাখ্যা)।
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)।
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 });
একটি 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 দেখুন।
| লক্ষণ | কারণ | সমাধান |
|---|---|---|
407 Proxy Authentication Required | Credential 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 স্পষ্টভাবে পাস করুন |
| স্থানীয়ভাবে কাজ করে, টার্গেট সাইটে 403 | proxy বাগ নয় — TLS fingerprint | got-scraping বা একটি আসল ব্রাউজার; TLS গাইড দেখুন |
socks-proxy-agent / https-proxy-agent); কখনও বিল্ট-ইন proxy অপশন বিশ্বাস করবেন না।proxy: false। got: agent: {http, https}। Native fetch: undici ProxyAgent dispatcher।socks5h:// ব্যবহার করুন যাতে DNS proxy-এর মাধ্যমে resolve হয় — কোনো leak নেই।SOCKS5 + HTTP endpoint, sticky বা rotating, প্রতি-GB মূল্য — 500MB ফ্রি ট্রাফিক, কোনো কার্ড প্রয়োজন নেই।
বিনামূল্যে ট্রায়াল শুরু করুননতুন ব্যবহারকারীরা নিবন্ধনের সময় 500MB পান, সাথে প্রথম রিচার্জে বোনাস। সীমিত সময়ের অফার।