हर Node.js HTTP क्लाइंट proxy को अलग ढंग से संभालता है, और उनमें से आधे तो किसी हेल्पर पैकेज के बिना proxy प्रमाणीकरण को बिलकुल भी नहीं संभालते। axios कुछ संस्करणों में HTTPS टार्गेट के लिए अपने ही proxy विकल्प को चुपचाप अनदेखा कर देता है, native fetch में कोई proxy विकल्प है ही नहीं, और त्रुटि संदेश — ECONNRESET, 407, या बस एक हैंग — आपको कुछ नहीं बताते।
यह axios, got, node-fetch, native fetch (undici), और superagent को प्रमाणित residential proxy के माध्यम से रूट करने का पूरा, काम करने वाला संदर्भ है। यह हमारी Python गाइड्स (requests/httpx/aiohttp, Scrapy) का Node साथी है। सभी उदाहरण मानक प्लेसहोल्डर फ़ॉर्मैट का उपयोग करते हैं — इसमें अपने असली क्रेडेंशियल डालें:
socks5h://USERNAME:[email protected]:913
बिल्ट-इन proxy विकल्पों का उपयोग न करें। एक proxy एजेंट का उपयोग करें। Node के HTTP क्लाइंट कनेक्शन हैंडलिंग को एक "एजेंट" ऑब्जेक्ट को सौंप देते हैं, और एजेंट पैकेज (https-proxy-agent, socks-proxy-agent) CONNECT टनलिंग और प्रमाणीकरण को सही ढंग से लागू करते हैं। बिल्ट-इन विकल्प अक्सर ऐसा नहीं करते — axios का proxy कॉन्फ़िग सबसे कुख्यात उदाहरण है।
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 आपके एजेंट के ऊपर HTTP_PROXY एनवायरनमेंट वैरिएबल को भी लागू करने की कोशिश न करे।
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 से संरक्षित टार्गेट स्क्रैप कर रहे हैं, तो इसके बजाय got-scraping देखें — वही API, साथ ही ब्राउज़र-जैसी हेडर जनरेशन और HTTP/2 फ़िंगरप्रिंट नकल (यह क्यों मायने रखता है: JA3/JA4 explained)।
Node का बिल्ट-इन fetch undici से आता है, proxy एनवायरनमेंट वैरिएबल को अनदेखा करता है, और इसमें कोई 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 के लिए, या तो इसके आगे एक स्थानीय फ़ॉरवर्डर रखें या ऐसे क्लाइंट का उपयोग करें जो socks एजेंट स्वीकार करता है (ऊपर 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 });
एक रोटेटिंग residential gateway के साथ आप IP सूचियों का प्रबंधन नहीं करते — gateway आपको प्रति कनेक्शन एक ताज़ा exit देता है, या प्रति session id एक exit पकड़े रखता है। Node में यह साफ़-साफ़ प्रति पहचान एक एजेंट में मैप होता है:
// 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");
एक पहचान के भीतर कनेक्शन पूलिंग के लिए एजेंट का पुन: उपयोग करें; पहचानों के बीच कभी एक एजेंट साझा न करें। कब रोटेट करें बनाम कब स्टिक करें, यह अपने आप में एक विषय है — देखें sticky vs rotating sessions।
| लक्षण | कारण | समाधान |
|---|---|---|
407 Proxy Authentication Required | क्रेडेंशियल proxy तक नहीं पहुँच रहे | user:pass को क्लाइंट कॉन्फ़िग में नहीं, एजेंट URL में डालें |
| axios http:// पर काम करता है, https:// पर विफल | केवल httpAgent सेट है | httpsAgent भी सेट करें, और proxy: false |
ECONNRESET तुरंत | गलत port / गलत प्रोटोकॉल (SOCKS एजेंट के साथ HTTP port) | एजेंट प्रकार को port से मिलाएँ |
| DNS लीक / आंतरिक होस्टनेम विफल | socks5:// DNS को स्थानीय रूप से हल करता है | socks5h:// का उपयोग करें — h होस्टनेम को proxy के माध्यम से भेजता है |
| Native fetch HTTP_PROXY को अनदेखा करता है | undici env vars नहीं पढ़ता | एक dispatcher स्पष्ट रूप से पास करें |
| स्थानीय रूप से काम करता है, टार्गेट साइट पर 403 | proxy बग नहीं — TLS फ़िंगरप्रिंट | got-scraping या एक असली ब्राउज़र; देखें TLS guide |
socks-proxy-agent / https-proxy-agent); बिल्ट-इन proxy विकल्पों पर कभी भरोसा न करें।proxy: false। got: agent: {http, https}। Native fetch: undici ProxyAgent dispatcher।socks5h:// का उपयोग करें ताकि DNS proxy के माध्यम से हल हो — कोई लीक नहीं।SOCKS5 + HTTP एंडपॉइंट, sticky या रोटेटिंग, प्रति-GB मूल्य निर्धारण — 500MB मुफ़्त ट्रैफ़िक क्रेडिट, किसी कार्ड की आवश्यकता नहीं।
Start Free Trialनए यूज़र्स को साइन अप पर 500MB मिलते हैं, साथ ही पहली रिचार्ज पर बोनस। सीमित समय की पेशकश।