vn
English
Español
中國人
Deutsch
Українська
Português
Français
भारतीय
Türkçe
한국인
Italiano
Gaeilge
اردو
Indonesia
Polski Axios là một thư viện JavaScript để gửi các yêu cầu HTTP, hỗ trợ xử lý dữ liệu bất đồng bộ, xử lý phản hồi và lỗi, và dễ dàng tích hợp vào cả ứng dụng phía client lẫn server dựa trên Node.js. Trong nhiều tình huống thực tế, đặc biệt khi xử lý số lượng lớn yêu cầu hoặc khi việc truy cập nội dung bị hạn chế, việc thiết lập proxy trong Axios thường trở nên cần thiết. Các máy chủ trung gian cho phép thay đổi địa chỉ IP của client và định tuyến yêu cầu thông qua một nút trung gian. Vì việc sử dụng proxy trong Axios đòi hỏi cấu hình chính xác và hiểu biết về kiến trúc kết nối, hướng dẫn này trình bày các phương pháp kết nối giao thức HTTP(S) và SOCKS, chi tiết về xác thực, cấu hình agent, cũng như các lỗi thường gặp và cách khắc phục.
Proxy được áp dụng trong các trường hợp sau:
Sử dụng Axios với các nút trung gian được cấu hình đúng cho phép triển khai các kịch bản này. Tuy nhiên, cần hiểu rằng bản thân thư viện chỉ là công cụ để gửi yêu cầu HTTP. Khả năng vượt chặn, truy cập nội dung bị giới hạn theo vùng và quản lý lưu lượng phụ thuộc vào:
Axios hỗ trợ các loại sau tùy theo giao thức:
Để tích hợp, bạn cần:
Quan trọng: Thư viện không hỗ trợ SSH, FTP, Shadowsocks hoặc các giao thức tương tự. Để sử dụng chúng, cần áp dụng các công cụ riêng hoặc cấu hình tunneling ở cấp hệ điều hành.
Trước khi cài đặt, cần xem xét một số khía cạnh kỹ thuật: giao thức nào sẽ được sử dụng, có cần xác thực hay không, và có cần xoay vòng hay không. Dưới đây là hướng dẫn từng bước cho các phương pháp kết nối khác nhau.
Trước khi cấu hình proxy HTTP trong Axios, bạn cần chuẩn bị đúng môi trường làm việc.
Lưu ý: Các lệnh nên được thực thi trong terminal của hệ điều hành (CMD, PowerShell, bash) hoặc trong terminal tích hợp của IDE như Visual Studio Code. Để thực thi đúng, thư mục làm việc hiện tại phải trỏ tới thư mục gốc của dự án.
mkdir proxy-setup-axios
cd proxy-setup-axios npm init -y npm install axios echo>app.js "scripts": {
"start": "node app.js"
}
Quan trọng: Tệp package.json có thể được mở trong bất kỳ trình soạn thảo code nào hoặc thậm chí Notepad. Khi chỉnh sửa, hãy cẩn thận tuân thủ cú pháp: không xóa hoặc thay đổi dấu ngoặc kép, ngoặc nhọn hoặc dấu hai chấm, vì điều đó sẽ dẫn đến lỗi thực thi.
npm start Nếu tất cả các bước được thực hiện chính xác, ứng dụng sẽ khởi chạy thành công ngay cả với một tệp cấu hình rỗng. Trong trường hợp này, chương trình sẽ chỉ đơn giản đóng lại mà không hiển thị bất kỳ đầu ra bổ sung nào. Hành vi này là mong đợi và cho thấy rằng tệp chưa có mã thực thi, nhưng môi trường đã được cài đặt đúng.
Khi sử dụng giải pháp tĩnh, tất cả các yêu cầu đều được định tuyến qua cùng một địa chỉ IP. Cách tiếp cận này phù hợp khi không cần xoay vòng IP.
Để kết nối một proxy HTTPS trong Axios, hãy sử dụng cấu hình sau:
axios.get(URL, {
proxy: {
protocol: 'http',
host: '82.211.7.97',
port: 59100
}
})
Nếu máy chủ trung gian yêu cầu xác thực, hãy thêm một khối auth:
auth: {
username: 'proxyUser',
password: 'proxyPass'
}
Một ví dụ hoàn chỉnh với xử lý yêu cầu tới dịch vụ httpbin.org:
const axios = require('axios');
async function requestThroughProxy() {
try {
const response = await axios.get('https://httpbin.org/ip', {
proxy: {
protocol: 'http',
host: '82.211.7.97',
port: 59100,
auth: {
username: 'proxyUser',
password: 'proxyPass'
}
}
});
console.log('Proxy IP:', response.data);
} catch (error) {
console.error('Request failed:', error.message);
}
}
requestThroughProxy();
Khối try/catch được sử dụng để xử lý các lỗi có thể xảy ra trong quá trình gửi yêu cầu. Trong ví dụ này, yêu cầu được gửi đến https://httpbin.org/ip, dịch vụ này trả về địa chỉ IP hiện tại của client. Nếu proxy không khả dụng hoặc yêu cầu thất bại, khối catch sẽ chặn ngoại lệ và hiển thị thông báo lỗi.
Khi nhiều yêu cầu đi qua cùng một IP, nguy cơ bị chặn bởi tài nguyên đích sẽ tăng lên. Để tránh điều này, các proxy dân cư hỗ trợ xoay vòng IP thường được sử dụng. Những giải pháp này cung cấp mức độ ẩn danh cao hơn và cho phép phân phối tải đồng đều. Trên thực tế, điều này được thực hiện bằng cách tạo một tập hợp địa chỉ IP được cấu hình sẵn và triển khai cơ chế chọn proxy ngẫu nhiên hoặc tuần tự trong mã.
Dưới đây là ví dụ chọn IP ngẫu nhiên bằng gói http-proxy-agent:
const axios = require('axios');
const HttpProxyAgent = require('http-proxy-agent');
// Danh sách proxy có xác thực
const proxyList = [
'http://user1:pass1@82.211.7.97:59100',
'http://user2:pass2@82.211.7.97:59101',
'http://user3:pass3@82.211.7.97:59102'
];
// Hàm chọn proxy ngẫu nhiên
function getRandomProxy() {
const index = Math.floor(Math.random() * proxyList.length);
return proxyList[index];
}
// Gửi nhiều yêu cầu với xoay vòng IP
(async () => {
for (let i = 0; i < 5; i++) {
const proxy = getRandomProxy();
const agent = new HttpProxyAgent(proxy);
try {
const response = await axios.get('https://api.ipify.org?format=json', {
httpAgent: agent,
httpsAgent: agent,
timeout: 3000
});
console.log(`Đã dùng proxy ${proxy} -- IP:`, response.data.ip);
} catch (err) {
console.error(`Proxy ${proxy} thất bại:`, err.message);
}
}
})();
Trong ví dụ này, mỗi yêu cầu của Axios sử dụng một địa chỉ proxy được chọn ngẫu nhiên từ danh sách đã chỉ định. Dịch vụ https://api.ipify.org?format=json trả về IP bên ngoài, cho phép xác minh rằng kết nối đã được thiết lập chính xác. Trong trường hợp lỗi (chẳng hạn như máy chủ không khả dụng hoặc thông tin xác thực sai), khối catch sẽ chặn ngoại lệ và hiển thị thông báo lỗi.
Việc sử dụng SOCKS5 là hợp lý khi cần vượt qua các bộ lọc mạng, làm việc với API bị hạn chế, và trong các kịch bản yêu cầu truyền tải lưu lượng không chuẩn, bao gồm cả các yêu cầu DNS.
Để làm việc với proxy socks5 trong Axios, khuyến nghị sử dụng gói socks-proxy-agent. Gói này hỗ trợ loại trung gian này thông qua một proxy agent tích hợp liền mạch với thư viện.
Cài đặt agent proxy cho Axios:
npm install axios socks-proxy-agent
Cấu hình proxy trong Axios:
const axios = require('axios');
const { SocksProxyAgent } = require('socks-proxy-agent');
// Tham số máy chủ trung gian
const proxy = {
host: '45.192.135.68',// Địa chỉ IP
port: 50101,// Cổng
username: 'Username',// Tên đăng nhập (nếu cần)
password: 'Password'// Mật khẩu (nếu cần)
};
// Xây dựng URL proxy với xác thực
const proxyUrl = `socks5://${proxy.username}:${proxy.password}@${proxy.host}:${proxy.port}`;
// Tạo SOCKS5 agent
const agent = new SocksProxyAgent(proxyUrl);
// Gửi yêu cầu qua proxy trong Axios
axios.get('https://api.ipify.org/?format=json', { httpsAgent: agent })
.then(response => {
console.log('IP của bạn:', response.data);
})
.catch(error => {
console.error('Lỗi kết nối:', error.message);
});
Quan trọng: Nếu máy chủ trung gian không yêu cầu xác thực, bạn nên xây dựng proxyUrl mà không có tên đăng nhập và mật khẩu:
const proxyUrl = `socks5://${proxy.host}:${proxy.port}`;
Để kiểm tra xem mọi thứ có hoạt động đúng hay không, bạn có thể gửi một yêu cầu đến dịch vụ trả về địa chỉ IP bên ngoài, ví dụ:
axios.get('https://api.ipify.org?format=json', { httpsAgent: agent })
.then(response => {
console.log('IP của bạn:', response.data.ip);
})
.catch(error => {
console.error('Lỗi kết nối:', error.message);
});
Điều này cho phép bạn xác nhận rằng các yêu cầu đang được định tuyến qua proxy một cách chính xác.
Việc sử dụng hiệu quả Axios với máy chủ trung gian đòi hỏi cấu hình cẩn thận, cần xem xét các khía cạnh chính sau:
Thực hiện theo các khuyến nghị này đảm bảo hoạt động ổn định của proxy trong Axios, ngay cả khi tải nặng.
Proxy trong Axios có thể thất bại vì nhiều lý do khác nhau, chủ yếu do đặc thù khi làm việc với proxy trong Node.js, nơi cấu hình đúng và tương thích giao thức là yếu tố then chốt.
Nguyên nhân: Địa chỉ IP hoặc cổng không chính xác, máy chủ proxy không khả dụng hoặc kết nối bị chặn ở cấp độ mạng bởi tường lửa hoặc hệ thống host.
Giải pháp:
curl -x http://username:password@proxy-host:port https://api.ipify.org try {
await axios.get(url, { httpAgent });
} catch (err) {
if (err.code === 'ECONNREFUSED') {
// Chuyển sang IP khác
}
} Nguyên nhân: Máy chủ trung gian trả về phản hồi không hợp lệ từ tài nguyên đích do:
Giải pháp:
Nguyên nhân: Máy chủ trung gian sử dụng SOCKS5, trong khi kết nối được thiết lập qua HTTP hoặc HTTPS agent. Axios không hỗ trợ trực tiếp proxy, vì vậy yếu tố then chốt trong cấu hình là chọn đúng agent.
Giải pháp:
Kết nối agent phù hợp (http-proxy-agent, https-proxy-agent, socks-proxy-agent) tùy thuộc vào loại giao thức đang được sử dụng.
const HttpsProxyAgent = require('https-proxy-agent');
const agent = new HttpsProxyAgent('http://user:pass@ip:port');
Đối với SOCKS5:
const { SocksProxyAgent } = require('socks-proxy-agent');
const agent = new SocksProxyAgent('socks5://user:pass@ip:port');
Nguyên nhân: Sai tên người dùng hoặc mật khẩu, thiếu header Proxy-Authorization, hoặc định dạng chuỗi kết nối không đúng.
Giải pháp:
Kiểm tra cú pháp của chuỗi kết nối: http://user:pass@ip:port. Đảm bảo rằng agent truyền đúng các tham số xác thực.
const HttpsProxyAgent = require('https-proxy-agent');
const proxyUrl = 'http://username:password@82.211.9.160:50100';
const agent = new HttpsProxyAgent(proxyUrl);
Cấu hình proxy trong Axios là một bước thiết yếu để làm việc với tính ẩn danh, cân bằng tải và vượt qua hạn chế. Độ tin cậy của yêu cầu được đảm bảo thông qua cấu hình đúng agent proxy, lựa chọn giao thức tương thích và xử lý lỗi được thiết kế hợp lý. Đồng thời, chất lượng của máy chủ proxy ảnh hưởng trực tiếp đến hiệu quả của công cụ. Proxy miễn phí thường không ổn định, dễ bị chặn và nhanh chóng gây ra sự cố.
Đối với môi trường sản xuất, nên dựa vào các giải pháp trả phí từ nhà cung cấp uy tín, cung cấp pool IP lớn, hỗ trợ xoay vòng và uptime cao.
Có, Axios hoàn toàn có thể được cấu hình toàn cục để sử dụng máy chủ proxy với các biến môi trường: HTTP_PROXY, HTTPS_PROXY và NO_PROXY. Các biến này có thể được thiết lập thông qua thuộc tính hệ thống. Để thực hiện, mở System Properties → Environment Variables, tạo một biến mới (ví dụ: HTTP_PROXY) và chỉ định địa chỉ máy chủ proxy làm giá trị của nó.
Axios không phân biệt giữa các loại proxy khác nhau: dân cư, di động hay trung tâm dữ liệu — cấu hình xác thực là như nhau. Yêu cầu chính là định dạng URL chính xác hoặc một khối proxy.auth được định nghĩa đúng.
Các lựa chọn thay thế chính cho việc sử dụng proxy trong Axios với Node.js là node-fetch và Got. Cả hai thư viện đều hỗ trợ proxy HTTP/HTTPS thông qua biến môi trường cũng như cấu hình rõ ràng trong mã. Khi có thể, Got cung cấp các tùy chọn linh hoạt hơn cho timeout, retry và tùy chỉnh yêu cầu, trong khi node-fetch có cú pháp quen thuộc hơn với lập trình viên frontend. Lựa chọn phụ thuộc vào nhu cầu cụ thể và sự tiện lợi của bạn.
Bình luận: 0