Built-in fetch and undici#
Nde global fetch adalah undici. ProxyAgent sesuai permintaan dengan dispatcher pilihan, atau set secara global sekali dengan 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 pool connection, so surelling request may use one connection and because one exit. Untuk sebuah exit fresh per request buat agen dengan pipelining: 0 dan connections: 1, atau hanya menggunakan berbeda -sid- dalam sesi logis.
akxios#
Axios sendiri proxy pilihan tidak terowong HTTPS dapat diandalkan; pendekatan standar adalah agen dari https-proxy-agent dan 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);kena#
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);SOCKS5#
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());Variabel lingkungan#
undici tidak membaca HTTPS_PROXY secara baku. Versi kapal undici baru-baru ini EnvHttpProxyAgent, yang tidak; set sebagai operator global dan seluruh proses, termasuk ketiga perpustakaan partai dibangun pada fetch, melewati proxy.
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());Konkusi dan rotasi#
- Satu
ProxyAgentper sesi lengket (berbeda-sid-), dibagi oleh semua permintaan sesi itu. - Untuk rotasi lebar, jaga satu agen tapi matikan reuse koneksi, atau jalankan N agen dengan ID sesi N dan robin mereka.
- Lihat
UND_ERR_SOCKETdanECONNRESET: sebuah pintu keluar perumahan pergi; coba lagi sekali, koneksi berikutnya memilih yang lain.
Pertanyaan yang orang tanyakan#
Mengapa Axios mengabaikan proxy saya untuk HTTPS?
Pembangunan-nya dalam dukungan proksi terbatas untuk terowongan CONNECT. Gunakan https- proxy- agent sebagai httpsAgent dan set proxy: salah sehingga aksios tidak mencoba untuk menanganinya sendiri.
Dapatkah saya proksi hanya beberapa permintaan?
Berikan operator atau agen pada permintaan yang membutuhkannya dan tinggalkan yang lain tidak tersentuh; tidak ada yang global kecuali Anda sebut setGlobalDispatcher.