अंतर्निहित लाने और लाभकारी#
नोड का वैश्विक fetch इसे छोड़कर सामग्री पर जाएं ProxyAgent अनुरोध के अनुसार dispatcher विकल्प, या इसे वैश्विक स्तर पर एक बार के साथ सेट करें setGlobalDispatcher.
import { fetch, ProxyAgent, setGlobalDispatcher } from "undici";
const proxy = new ProxyAgent("http://USER-cc-us:PASS@res.proxy-cyber.com:9000");
// Per request
const res = await fetch("https://api.ipify.org", { dispatcher: proxy });
console.log(await res.text());
// Or globally, for every fetch in the process
setGlobalDispatcher(proxy);A ProxyAgent पूल कनेक्शन, इसलिए लगातार अनुरोध एक कनेक्शन का पुन: उपयोग कर सकते हैं और इसलिए एक निकास। अनुरोध के अनुसार एक नए निकास के लिए एजेंट को एजेंट के साथ बनाया जाता है। pipelining: 0 और connections: 1, या बस एक अलग का उपयोग करें -sid- प्रति तार्किक सत्र।
Axios#
Axios's own proxy विकल्प शायद ही कभी सुरंग नहीं है; मानक दृष्टिकोण से एक एजेंट है https-proxy-agent और proxy: false.
import axios from "axios";
import { HttpsProxyAgent } from "https-proxy-agent";
const agent = new HttpsProxyAgent("http://USER-cc-de-city-berlin-sid-cart42-ttl-15m:PASS@res.proxy-cyber.com:9000");
const client = axios.create({ httpsAgent: agent, httpAgent: agent, proxy: false, timeout: 30000 });
const { data } = await client.get("https://api.ipify.org");
console.log(data);मिल गया#
import got from "got";
import { HttpsProxyAgent } from "https-proxy-agent";
const agent = new HttpsProxyAgent("http://USER-cc-us:PASS@res.proxy-cyber.com:9000");
const body = await got("https://api.ipify.org", { agent: { https: agent, http: agent }, timeout: { request: 30000 } }).text();
console.log(body);एक-एक-एक#
import fetch from "node-fetch";
import { SocksProxyAgent } from "socks-proxy-agent";
const agent = new SocksProxyAgent(process.env.PROXY_URL);
const response = await fetch("https://api.ipify.org", { agent });
console.log(await response.text());पर्यावरण चर#
undici पढ़ा नहीं जाता HTTPS_PROXY डिफ़ॉल्ट रूप से। हाल के undici संस्करणों जहाज EnvHttpProxyAgent, जो करता है; इसे वैश्विक प्रेषक और पूरी प्रक्रिया के रूप में सेट करता है, जिसमें तीसरे पक्ष के पुस्तकालयों को शामिल किया गया है, प्रॉक्सी के माध्यम से चला जाता है।
import { EnvHttpProxyAgent, setGlobalDispatcher } from "undici";
// HTTPS_PROXY=http://USER-cc-us:PASS@res.proxy-cyber.com:9000 NO_PROXY=localhost node app.js
setGlobalDispatcher(new EnvHttpProxyAgent());तुल्यता और रोटेशन#
- एक
ProxyAgentप्रति चिपचिपा सत्र (विभिन्न)-sid-इस सत्र के सभी अनुरोधों द्वारा साझा किया गया है। - विस्तृत रोटेशन के लिए, एक एजेंट को बनाए रखें लेकिन कनेक्शन को पुन: उपयोग करने में अक्षम करें, या एन सत्र आईडी के साथ एन एजेंट चलाएं और उन्हें राउंड-रोबिन करें।
- देखो
UND_ERR_SOCKETऔरECONNRESET: एक आवासीय निकास दूर हो गया; एक बार फिर से प्रयास करें, अगले कनेक्शन दूसरे को चुनता है।
सवाल पूछो#
क्यों axios अपने प्रॉक्सी को HTTPS के लिए अनदेखा करता है?
इसका अंतर्निहित प्रॉक्सी समर्थन कनेक्टीट सुरंगों के लिए सीमित है। https-proxy-agent का उपयोग httpsAgent के रूप में करें और प्रॉक्सी सेट करें: झूठा तो अक्ष इसे खुद को संभालने की कोशिश नहीं करता है।
क्या मैं केवल कुछ अनुरोधों को प्रॉक्सी कर सकता हूँ?
हाँ। प्रेषक या एजेंट को उन अनुरोधों पर पास करें जिन्हें इसकी आवश्यकता है और दूसरों को बिना किसी चीज से छुट्टे छोड़ दें; जब तक आप सेटग्लोबलडिस्पैचर नहीं कहते तब तक कोई वैश्विक नहीं है।