Node.js Web Scraping With Proxies: Axios and Fetch
TL;DR
Một proxy Node.js cho việc scraping outbound khác với đối tượng Proxy của JavaScript và một máy chủ reverse-proxy.
Axios chấp nhận một proxy HTTP thông qua cấu hình proxy của yêu cầu; sử dụng timeout rõ ràng và xác thực nội dung trả về.
fetch() được tích hợp sẵn của Node sử dụng Undici, và định tuyến proxy theo yêu cầu có thể sử dụng ProxyAgent của Undici làm dispatcher.
Giữ một dispatcher hoặc agent cho danh tính bám dính, đóng nó khi công việc kết thúc, và chỉ thay đổi tại các ranh giới nhiệm vụ độc lập.
Một proxy thay đổi lộ trình mạng; nó không cấp quyền, giải quyết CAPTCHAs, hoặc làm cho một scraper không hợp lệ trở nên đúng.
Bạn Đang Nói Đến “Node.js Proxy” Nào?
Đối với việc scraping web, một proxy Node.js là một trung gian mạng outbound được sử dụng bởi một khách hàng HTTP như Axios hoặc fetch. Nó không phải là đối tượng metaprogramming Proxy được mô tả bởi MDN, và nó không phải là proxy ngược chấp nhận lưu lượng cho ứng dụng của bạn. Bài viết này chỉ tập trung vào các yêu cầu outbound đến các mục tiêu công khai hoặc được ủy quyền.
Nstdata cung cấp các cổng proxy có thể được sử dụng bởi các khách hàng HTTP của Node. Thư viện khách hàng xác định cách mà cổng được gắn kết, cách đọc thông tin đăng nhập, và liệu các kết nối có được tái sử dụng hay không. Hướng dẫn proxy Axios hiện có đề cập đến các mẫu cụ thể của Axios; hướng dẫn này so sánh chúng trực tiếp với hành vi fetch hiện tại của Node.
Node tài liệu fetch như một global tương thích với trình duyệt trong . Hướng dẫn mạng doanh nghiệp hiện tại của Node cũng mô tả hỗ trợ proxy môi trường tùy chọn trong các phiên bản gần đây, nhưng cấu hình cụ thể của thư viện vẫn là lựa chọn di động nhất trên các runtime được hỗ trợ.
Một ví dụ proxy scraping web Node thực tiễn cần một runtime Node được hỗ trợ, một khách hàng HTTP, một mục tiêu được ủy quyền, và thông tin đăng nhập proxy. Các ví dụ sử dụng ES module và tránh nhúng bí mật.
mkdir node-proxy-demo
cd node-proxy-demo
npm init -ynpminstall axios undici
Cấu hình các biến môi trường trong shell hoặc kho lưu trữ bí mật triển khai của bạn:
Không bao giờ in URL thông tin đăng nhập hoàn thành. Thay vào đó, ghi lại một ID lộ trình không bí mật, nhãn hostname, độ trễ, và trạng thái chấp nhận.
Kết nối Axios và Fetch thông qua Nstdata
Sử dụng các phiên proxy được quản lý để thu thập dữ liệu Node.js có thể quan sát và được ủy quyền.
Axios có thể truyền một đối tượng proxy trong mỗi yêu cầu, giữ cho thông tin đăng nhập tách biệt khỏi URL mục tiêu. Tài liệu cấu hình yêu cầu của Axios hiện tại mô tả proxy, auth, timeout, và khả năng tắt xử lý proxy bằng proxy: false khi cung cấp các agent tùy chỉnh.
validateStatus: () => true cho phép ứng dụng kiểm tra mọi trạng thái HTTP ở một nơi thay vì biến một số phản hồi thành ngoại lệ như vận chuyển. Điều này chỉ hữu ích nếu bạn sau đó thực thi việc chấp nhận bản thân.
Bước 2: Xác Thực một phản hồi đã được proxy
const response =await client.get("https://example.com/",{responseType:"text",});const accepted = response.status===200&&typeof response.data==="string"&& response.data.includes("Example Domain");if(!accepted){thrownewError(`Phản hồi không được chấp nhận: ${response.status}`);}console.log({status: response.status,bytes: response.data.length});
Một trang thử thách 200 không phải là một bản ghi được chấp nhận. Kiểm tra một trường ổn định, bộ chọn, lược đồ, hoặc dấu hiệu nội dung thuộc về đích được ủy quyền. Hướng dẫn JavaScript web scraping thêm các mẫu phân tích khi vận chuyển đáng tin cậy.
Phương Pháp 2: Sử Dụng một Proxy với Node fetch
Node fetch có thể định tuyến một yêu cầu thông qua một ProxyAgent của Undici được cung cấp như dispatcher. Tài liệu chính thức Tài liệu Undici ProxyAgent hiển thị URI agent, tùy chọn dispatcher, và vòng đời close() rõ ràng.
Bước 1: Xây dựng URL thông tin đăng nhập một cách an toàn
import{ProxyAgent}from"undici";const user =encodeURIComponent(process.env.PROXY_USER);const password =encodeURIComponent(process.env.PROXY_PASSWORD);const proxyUrl =`http://${user}:${password}@${process.env.PROXY_HOST}:${process.env.PROXY_PORT}`;const dispatcher =newProxyAgent(proxyUrl);
Mã hóa các thành phần thông tin đăng nhập ngăn chặn @, :, hoặc / thay đổi cấu trúc URL proxy. Giữ URL nằm trong phạm vi của quy trình và tránh lỗi.
Bước 2: Fetch, xác thực, và đóng
try{const response =awaitfetch("https://example.com/",{ dispatcher,signal:AbortSignal.timeout(20_000),headers:{"user-agent":"authorized-monitor/1.0"},});const html =await response.text();if(response.status!==200||!html.includes("Example Domain")){thrownewError(`Phản hồi không được chấp nhận: ${response.status}`);}console.log({status: response.status,bytes: html.length});}finally{await dispatcher.close();}
Đóng dispatcher giải phóng các socket đã được nhóm khi một công việc ngắn hạn kết thúc. Một quy trình máy chủ có thể tái sử dụng dispatcher cho danh tính của nó và đóng nó trong quá trình tắt một cách nhẹ nhàng.
Xoay Proxies theo Công Việc, Không theo Dòng Mã
Xoay proxy Node là một quyết định điều phối: chọn một tuyến cho một công việc độc lập, giữ lại cho các yêu cầu liên quan, sau đó đóng tài nguyên mạng của nó.
Vòng lặp được giới hạn và không thử lại một sự từ chối. Một pool sản xuất nên lưu trữ các thất bại liên tiếp, thời gian làm mát, độ trễ gần đây và timestamp đã chấp nhận cuối cùng. Các lần thử lại cần có sự tăng dần lũy thừa cộng với jitter, và chỉ các yêu cầu idempotent mới được phát lại tự động. Hướng dẫn quét hàng loạt giải thích tại sao các điểm kiểm tra và kế toán đầu ra đã chấp nhận quan trọng khi tập hợp URL tăng lên.
Nstdata Residential Prime Proxies phù hợp với các tác vụ Node được ủy quyền cần cổng HTTP/HTTPS cùng với kiểm soát phiên gây hoặc dính. Sản phẩm có thể tập trung hóa việc chọn tuyến trong khi Axios hoặc Undici vẫn có trách nhiệm với thời gian chờ, vòng đời socket, và xác thực ngữ nghĩa. Các tài liệu sản phẩm hiện tại mô tả các giao thức HTTP, HTTPS và SOCKS5 cũng như các tùy chọn duy trì phiên. Chọn quay vòng cho các URL độc lập và một phiên dính cho các hành trình phân trang hoặc không cần đăng nhập cần duy trì sự liên tục; quyền truy cập proxy không bao giờ ghi đè lên chính sách mục tiêu.
Các phiên proxy Residential Prime: Gán một ID phiên của nhà cung cấp cho một tác vụ Node logic và chỉ làm mới nó tại một ranh giới sạch.
Tương thích với khách hàng: Sử dụng đối tượng proxy của Axios hoặc dispatcher của Undici thay vì giả định rằng mọi gói Node đều đọc biến môi trường giống nhau.
Chấp nhận đã đo lường: Theo dõi các bản ghi hợp lệ, trang thách thức, thất bại vận chuyển, và độ trễ riêng biệt để chất lượng tuyến có thể quan sát được.
Bảng Quyết Định Proxy Axios vs Fetch
Axios và fetch đều có thể sử dụng một proxy HTTP xác thực, nhưng bề mặt cấu hình và mặc định phản hồi của chúng khác nhau.
Quyết định
Axios
Node fetch + Undici
Gắn proxy
Đối tượng proxy trong yêu cầu
ProxyAgent dispatcher
Mặc định không phải 2xx
Axios từ chối theo mặc định
fetch giải quyết; kiểm tra ok hoặc trạng thái
Thời gian chờ
Axios timeout
AbortSignal.timeout()
Vòng đời socket
Quản lý bởi Axios/các tác nhân
Tái sử dụng và đóng dispatcher một cách có chủ đích
Thông tin đăng nhập
Đối tượng proxy.auth
URI tác nhân được mã hóa hoặc tùy chọn mã tài liệu
Chọn Axios nếu dự án đã sử dụng các interceptor và mô hình lỗi của nó. Chọn fetch nguyên bản với Undici khi việc giảm thiểu phụ thuộc vào wrapper và kiểm soát dispatcher rõ ràng quan trọng. Không trộn trường proxy tích hợp sẵn của Axios với một tác nhân tunnel tùy chỉnh trừ khi khách hàng được cấu hình với proxy: false; cấu hình kép gây ra các lộ trình gây nhầm lẫn.
Khắc Phục Lỗi Proxy Node
Các lỗi proxy Node cần chẩn đoán vận chuyển, xác thực, thời gian chờ, và nội dung riêng biệt.
Triệu chứng
Kiểm tra
ECONNREFUSED
Máy chủ proxy, cổng, listener, tường lửa
ETIMEDOUT hoặc hủy bỏ
Ngân sách kết nối/đọc, độ trễ mục tiêu, sức khỏe proxy
HTTP 407
Thông tin đăng nhập proxy hoặc danh sách cho phép; không thử lại mù quáng
HTTP 403 hoặc HTML thách thức
Xác thực và chính sách mục tiêu; dừng lại thay vì quay vòng tích cực
Axios bỏ qua tác nhân
Đảm bảo proxy: false khi một tác nhân tùy chỉnh sở hữu định tuyến
Quy trình không thoát
Đóng các dispatcher Undici và các tay cầm mở khác
Khi các trang yêu cầu kết xuất trình duyệt, một khách hàng HTTP là mô hình thực thi sai. Xem lại trích xuất nội dung từ các trang web nặng JavaScript và chuyển sang quy trình làm việc của trình duyệt được ủy quyền thay vì tạo nội dung DOM từ HTML không đầy đủ.
Kết Luận
Một thiết lập proxy web scraping Node.js đáng tin cậy bắt đầu bằng việc chọn ranh giới khách hàng chính xác: một đối tượng proxy Axios hoặc một dispatcher Undici. Thêm cấu hình an toàn cho bí mật, thời gian chờ, kiểm tra phản hồi ngữ nghĩa, quay vòng có giới hạn, và dọn dẹp tài nguyên trước khi tăng thông lượng. Nstdata có thể cung cấp các phiên được quản lý, trong khi ứng dụng của bạn giữ trách nhiệm về xác thực và dữ liệu đã chấp nhận.
Node fetch có thể sử dụng một ProxyAgent của Undici được truyền như là dispatcher trong yêu cầu. Hành vi proxy môi trường thay đổi theo bản phát hành Node và cài đặt opt-in, vì vậy việc cấu hình thư viện rõ ràng hơn trong các triển khai hỗn hợp.
Q: Tôi làm thế nào để xác thực một proxy Axios?
Đặt proxy.auth.username và proxy.auth.password trong cấu hình yêu cầu Axios. Đọc cả hai giá trị từ một kho bí mật hoặc biến môi trường và không bao giờ ghi lại đối tượng cấu hình kết quả.
Q: JavaScript Proxy có liên quan đến các proxy HTTP không?
Không, JavaScript Proxy chặn các thao tác đối tượng trong thời gian thực thi của ngôn ngữ. Một proxy HTTP là một trung gian mạng dùng bởi Axios, fetch, trình duyệt, hoặc một khách hàng khác.
Q: Tôi có nên tạo một ProxyAgent mới cho mỗi yêu cầu không?
Tái sử dụng một ProxyAgent cho các yêu cầu có danh tính ổn định, sau đó đóng nó khi công việc hoặc quá trình đó kết thúc. Tạo một agent mới khi danh tính lộ trình hoặc phiên làm việc thay đổi một cách cố ý.
Q: Tại sao Axios hoạt động nhưng fetch lại thất bại qua cùng một proxy?
Axios và fetch sử dụng các bề mặt cấu hình proxy khác nhau. Xác nhận rằng Axios sử dụng proxy, fetch sử dụng một dispatcher của Undici, thông tin đăng nhập được mã hóa chính xác, và cả hai khách hàng áp dụng cùng một kiểm tra thời gian chờ và chấp nhận.
Q: Có thể một proxy thu thập dữ liệu từ mọi trang web không?
Không, một proxy chỉ thay đổi lộ trình mạng. Nó không cấp quyền truy cập, thực thi JavaScript trong một khách hàng chỉ HTTP, giải quyết CAPTCHAs, hoặc thay thế sự tuân thủ các điều khoản của trang web và luật pháp hiện hành.
Lena Zhou
Sep. 15th 2026
110M+ IP that voi ti le truy cap thanh cong 99.9%
Phan hoi trung binh ~0.5s cho tac vu dong thoi cao
Chi tu $0.1/GB
Truy cap ngay cac pool proxy residential, datacenter, IPv6 va ISP cao cap.