Cách cấu hình proxy HTTP(S) trong Node.js (Axios & Undici Fetch)
Cập nhật:
Khi lập trình backend hoặc viết bot bằng Node.js / TypeScript, một lỗi kinh điển mà nhiều lập trình viên gặp phải là thuộc tính proxy: { host, port } mặc định của thư viện Axios không thực hiện phương thức HTTP CONNECT đúng cách khi gọi tới các trang đích https://. Giải pháp chuẩn xác nhất trong Node.js là dùng https-proxy-agent cho Axios hoặc undici.ProxyAgent cho hàm fetch() gốc.
new HttpsProxyAgent('http://user:pass@ip:port')- 1 IP40.000 ₫
- 5+ IP35.000 ₫
- 10+ IP25.000 ₫
- 20+ IP25.000 ₫
- 50+ IP25.000 ₫
- 100+ IP25.000 ₫
- 200+ IP25.000 ₫
- 500+ IP25.000 ₫
- 1000+ IP22.000 ₫
- 2000+ IP20.000 ₫
- 1 IP40.000 ₫
- 5+ IP35.000 ₫
- 10+ IP25.000 ₫
- 20+ IP25.000 ₫
- 50+ IP25.000 ₫
- 100+ IP25.000 ₫
- 200+ IP25.000 ₫
- 500+ IP25.000 ₫
- 1000+ IP22.000 ₫
- 2000+ IP20.000 ₫
So sánh cấu hình giữa Axios (`https-proxy-agent`) và Node `fetch` (`undici`)
Cả hai thư viện đều nhận trực tiếp chuỗi URL http://user:pass@ip:port của VinaProxy và tự động tạo đường hầm TLS tới máy chủ đích:
| Thư viện Node.js | Gói npm cần cài | Cú pháp khởi tạo chuẩn |
|---|---|---|
Axios (axios) | npm i https-proxy-agent | axios.get(url, { httpsAgent: new HttpsProxyAgent('http://user:pass@ip:port'), proxy: false }) |
Native fetch (Node 18+) | npm i undici | fetch(url, { dispatcher: new ProxyAgent('http://user:pass@ip:port') }) |
Got (got) | npm i hpagent | got(url, { agent: { https: new HttpsProxyAgent({ proxy: 'http://user:pass@ip:port' }) } }) |
Lưu ý kỹ thuật để tránh rò rỉ socket và tối ưu hiệu năng Node.js
- Trong Axios, khi truyền
httpsAgent, hãy luôn đặt kèmproxy: falseđể Axios không cố đọc các biến môi trườngHTTP_PROXYxung đột - Khởi tạo đối tượng
new HttpsProxyAgent('http://user:pass@ip:port', { keepAlive: true })một lần bên ngoài hàm gọi API để tái sử dụng kết nối TCP - Thiết lập
timeout: 15000vàsignal: AbortSignal.timeout(15000)để tránh treo Event Loop khi mạng đích phản hồi chậm - Sử dụng công cụ đổi định dạng proxy để xuất thẳng danh sách proxy của bạn ra mảng JSON nạp vào file
config.json
Các bước thực hiện
- 1
Cài đặt gói https-proxy-agent hoặc undici
Trong thư mục dự án Node.js, chạy
npm install axios https-proxy-agent(hoặcnpm install undici). - 2
Khởi tạo Agent với chuỗi http://user:pass@ip:port
Viết
const agent = new HttpsProxyAgent('http://user:pass@ip:port');từ thông tin proxy VinaProxy. - 3
Truyền httpsAgent kèm proxy: false vào Axios
Gọi
const { data } = await axios.get('https://vinaproxy.com/api/my-ip', { httpsAgent: agent, proxy: false, timeout: 10000 });. - 4
Kiểm tra kết quả IP trả về
In
console.log(data)để xác nhận request đã đi qua đúng địa chỉ IPv4 của proxy.
Câu hỏi thường gặp
Tại sao dùng `proxy: { host, port, auth }` mặc định của Axios gọi trang https lại bị lỗi kết nối?
Bộ adapter HTTP mặc định trong Axios gửi yêu cầu GET thuần thay vì thiết lập đường hầm HTTP CONNECT cho TLS. Dùng httpsAgent: new HttpsProxyAgent(...) kèm proxy: false giải quyết triệt để vấn đề này.
Hàm `fetch()` mặc định trong Node.js 18/20/22 gắn proxy như thế nào?
Hàm fetch() gốc của Node.js được xây dựng trên nền undici. Bạn chỉ cần import { ProxyAgent } from 'undici' rồi truyền { dispatcher: new ProxyAgent('http://user:pass@ip:port') } vào tham số thứ hai của fetch().
Làm sao xuất nhanh 50 proxy VinaProxy thành mảng JSON cho Node.js?
Mở Công cụ đổi định dạng proxy, dán 50 dòng ip:port:user:pass và chọn đầu ra là JSON.
Trang bị bể proxy tĩnh tốc độ cao cho ứng dụng Node.js
Không giới hạn băng thông, xuất mảng JSON tức thì tại 7 quốc gia.
Mua Proxy cho Node.js