如何在 Node.js 中設定 Proxy 代理(Axios 與原生 Fetch)
更新於:
Axios 內建的 proxy: { host, port } 選項在發送請求至 https:// 目標時會出現錯誤,因為它不會主動發起 HTTP CONNECT 通道。為了在 Node.js 與 TypeScript 專案中順暢透過 VinaProxy 驗證型 HTTP(S) 代理進行路由,請在 Axios 內改用 HttpsProxyAgent(https-proxy-agent),或在 Node 原生 fetch() 中使用 undici.ProxyAgent 調度器。
new HttpsProxyAgent('http://user:pass@ip:port')- 1 個IP₫40,000
- 5+ 個IP₫35,000
- 10+ 個IP₫25,000
- 20+ 個IP₫25,000
- 50+ 個IP₫25,000
- 100+ 個IP₫25,000
- 200+ 個IP₫25,000
- 500+ 個IP₫25,000
- 1000+ 個IP₫22,000
- 2000+ 個IP₫20,000
- 1 個IP₫40,000
- 5+ 個IP₫35,000
- 10+ 個IP₫25,000
- 20+ 個IP₫25,000
- 50+ 個IP₫25,000
- 100+ 個IP₫25,000
- 200+ 個IP₫25,000
- 500+ 個IP₫25,000
- 1000+ 個IP₫22,000
- 2000+ 個IP₫20,000
Axios 與原生 Node.js fetch() 代理設定比較
兩種函式庫皆完整支援 VinaProxy 後台提供的標準 http://user:pass@ip:port URL 格式:
| HTTP 客戶端 | NPM 套件名稱 | 建議程式碼範例 |
|---|---|---|
| Axios | npm i https-proxy-agent | axios.get(url, { httpsAgent: new HttpsProxyAgent('http://user:pass@ip:port'), proxy: false }) |
原生 fetch (Node 18+) | npm i undici | fetch(url, { dispatcher: new ProxyAgent('http://user:pass@ip:port') }) |
| Got | npm i hpagent | got(url, { agent: { https: new HttpsProxyAgent({ proxy: 'http://user:pass@ip:port' }) } }) |
Node.js 連線池重複利用與逾時設定最佳實踐
- 在 Axios 設定
httpsAgent時務必同步加上proxy: false,避免 Axios 受到作業系統中可能衝突的HTTP_PROXY環境變數影響 - 在迴圈之外為每個代理 IP 僅建立一次
HttpsProxyAgent或ProxyAgent實例,以重複使用長連線(keep-alive socket)並降低系統開銷 - 利用我們的 Proxy 格式轉換工具 直接將 VinaProxy 代理清單匯出為 JSON 陣列格式,便於程式碼直接引用
操作步驟
- 1
安裝 https-proxy-agent(或 undici)
在 Node.js 專案路徑下執行
npm install axios https-proxy-agent。 - 2
建立 HttpsProxyAgent 實例
使用你的 VinaProxy 認證資訊初始化
const agent = new HttpsProxyAgent('http://user:pass@ip:port');。 - 3
將 httpsAgent 與 proxy: false 傳入 Axios
呼叫
const res = await axios.get('https://vinaproxy.com/api/my-ip', { httpsAgent: agent, proxy: false, timeout: 10000 });。 - 4
驗證對外出口 IP 位址
印出
res.data,確認回應確實來自你所指定的專屬靜態代理 IP。
常見問題
為什麼 Axios 預設的 proxy: { host, port, auth } 在 HTTPS 網址會失效?
Axios 內建的 proxy 設定僅會發送純文字 HTTP 請求,而不會開啟 HTTP CONNECT TLS 加密通道。搭配 proxy: false 使用 httpsAgent: new HttpsProxyAgent('http://user:pass@ip:port') 即可徹底修復。
如何在 Node.js 18/20/22 原生 fetch() 中使用代理?
從 undici 匯入 ProxyAgent,並在 fetch() 的第二個選項物件中帶入 { dispatcher: new ProxyAgent('http://user:pass@ip:port') }。
是否能將代理清單批次轉換為 Node.js 使用的 JSON 格式?
可以。將你的 ip:port:user:pass 代理字串貼至免費的 Proxy 格式轉換工具,選擇 JSON 格式即可即時匯出。
為你的 Node.js 後端與爬蟲賦予專屬靜態 IP 效能
支援全球 7 大地區、即時發放且不限流量的專屬 IPv4 與靜態 ISP 代理服務。
購買 Node.js 代理