Cách dùng Wget với proxy (và tránh những lỗi thường gặp)

Cập nhật lần cuối vào June 1, 2026
Cách dùng Wget với proxy (và tránh những lỗi thường gặp)
Tóm tắt bằng AI
Cấu hình Wget với proxy bằng cờ CLI, file cấu hình hoặc biến môi trường. Hướng dẫn năm 2026 này bao gồm thứ tự ưu tiên, xác thực và cách xử lý tường lửa doanh nghiệp.

Thiết lập proxy cho Wget nghe thì tưởng chỉ là việc làm trong năm giây — cho đến khi bạn mất nguyên một tiếng đồng hồ chỉ để hiểu vì sao request của mình cứ phớt lờ proxy mà chẳng báo lỗi gì. Tôi đã thấy chuyện này xảy ra với cả những quản trị hệ thống dày dạn lẫn lập trình viên mới vào nghề.

Nguyên nhân gốc rễ gần như không nằm ở proxy. Vấn đề thường đến từ bốn nơi khác nhau mà Wget có thể đọc cấu hình proxy, từ lỗi âm thầm khi bạn gõ sai kiểu chữ của biến môi trường, và cả những “đặc sản” mạng doanh nghiệp mà tài liệu hướng dẫn hay bỏ qua. Bài viết này sẽ đi qua mọi cách cấu hình Wget với proxy, thứ tự ưu tiên chính xác khi nhiều cấu hình xung đột, output terminal thực tế cho các lỗi phổ biến, và một phần riêng cho người dùng Windows cũng như môi trường công ty — nhóm người mà hầu hết bài hướng dẫn khác cứ như không hề tồn tại.

  • Độ khó: Mới bắt đầu đến trung cấp
  • Thời gian cần thiết: Khoảng 15 phút để đọc và cấu hình; khoảng 2 phút nếu bạn đã biết mình đang làm gì
  • Bạn cần chuẩn bị: Một bản Wget đang hoạt động (xem hướng dẫn bên dưới), địa chỉ proxy (host + port), và tùy chọn thêm thông tin xác thực proxy

Dùng thử Thunderbit để trích xuất dữ liệu có cấu trúc

Wget là gì và vì sao bạn nên dùng nó với proxy?

wget-through-proxy-diagram.webp

Wget là công cụ dòng lệnh dùng để tải file và trang web từ internet mà không cần trình duyệt. Mô tả chính thức của GNU gọi nó là một “network downloader không tương tác” — nghĩa là nó có thể chạy nền, tiếp tục các lần tải bị gián đoạn, và xử lý tải đệ quy mà không cần con người phải bấm gì cả.

Trong ngữ cảnh này, proxy là một máy chủ trung gian. Thay vì máy của bạn kết nối trực tiếp đến website đích, Wget sẽ gửi request tới proxy, rồi proxy chuyển tiếp request đó. Những lý do phổ biến để làm vậy gồm:

  • Tuân thủ tường lửa doanh nghiệp — công ty yêu cầu mọi lưu lượng đi ra phải qua proxy được phê duyệt
  • Bảo mật và quản lý IP — request sẽ xuất hiện từ IP của proxy, không phải IP của bạn
  • Kiểm thử theo vùng địa lý — lấy tài nguyên bị khóa theo khu vực hoặc kiểm tra hành vi CDN từ một vị trí cụ thể
  • Pipeline thu thập dữ liệu — tải HTML qua proxy xoay vòng để phục vụ nghiên cứu hoặc giám sát
  • Môi trường CI/CD — các máy build trong mạng bị khóa chặt, chỉ có thể ra internet qua proxy

Wget hỗ trợ sẵn proxy cho HTTP, HTTPS và FTP. Nó không hỗ trợ SOCKS5. Nếu bạn cần SOCKS5, curl có hỗ trợ gốc cho các scheme socks4://, socks5://socks5h:// — hoặc bạn có thể bọc Wget bằng một công cụ như proxychains4.

Cách cài Wget trên Linux, macOS và Windows

Trước khi cấu hình proxy, bạn cần có Wget trên máy. Phần này ngắn thôi — đây là bước chuẩn bị, không phải phần chính.

Linux (Debian/Ubuntu và RHEL/CentOS)

# Debian/Ubuntu
sudo apt update
sudo apt install wget

# RHEL/CentOS/Fedora
sudo dnf install wget

# Xác minh
wget --version

Ubuntu 24.04 LTS đi kèm Wget 1.21.4, còn Debian Trixie có 1.25.0. Gói CentOS Stream 10 hiển thị 1.24.5.

macOS (Homebrew)

brew install wget
wget --version

Formula của Homebrew hiện đang cung cấp Wget ổn định 1.25.0, với 396,818 lượt cài trong năm qua.

Windows (Chocolatey và cài thủ công)

choco install wget
wget --version

Gói GNU Wget trên Chocolatey báo cáo hơn 10 triệu lượt tải tổng cộng, dù hiện tại đang ở phiên bản 1.21.4. Binary thường nằm ở C:\ProgramData\chocolatey\bin\wget.exe.

Một lưu ý cho người dùng Windows: nơi Wget tìm file .wgetrc còn phụ thuộc vào bản build. Xem chi tiết ở phần Windows bên dưới.

4 cách dùng Wget với proxy (và nên chọn cách nào)

Có bốn phương pháp, mỗi phương pháp có phạm vi và mức ưu tiên khác nhau:

wgetrc-priority-bypass-proxy.webp

  1. Cờ -e trên dòng lệnh — dùng một lần, cho một lệnh duy nhất
  2. File cấu hình người dùng (~/.wgetrc) — áp dụng cho mọi lệnh Wget bạn chạy
  3. File cấu hình hệ thống (/etc/wgetrc) — áp dụng cho tất cả người dùng trên máy
  4. Biến môi trường (http_proxy, https_proxy) — áp dụng cho toàn bộ phiên shell

Phương pháp 1: Cờ dòng lệnh (proxy dùng một lần)

Phù hợp cho test nhanh. Cấu hình sẽ biến mất sau khi lệnh kết thúc.

wget -e use_proxy=on -e http_proxy=http://HOST:PORT/ http://example.com/file.zip

Với đích là HTTPS:

wget -e use_proxy=on -e https_proxy=http://HOST:PORT/ https://example.com/

Test nhanh — lấy IP mà bên ngoài nhìn thấy thông qua proxy:

wget -qO- -e use_proxy=on -e http_proxy=http://HOST:PORT/ http://ifconfig.me

Nếu output hiển thị IP của proxy thay vì IP của bạn, vậy là ổn.

Phương pháp 2: File cấu hình người dùng (~/.wgetrc)

Thêm các dòng này vào ~/.wgetrc (tạo file nếu chưa có):

use_proxy = on
http_proxy = http://proxy.company.com:8080/
https_proxy = http://proxy.company.com:8080/
no_proxy = localhost,127.0.0.1,.internal.company.com

Lưu ý có khoảng trắng quanh dấu = — đây là cú pháp .wgetrc được tài liệu hóa. Từ giờ, mọi lệnh Wget bạn chạy dưới user này sẽ đi qua proxy.

Phương pháp 3: Cấu hình toàn hệ thống (/etc/wgetrc)

Các chỉ thị giống ~/.wgetrc, nhưng đặt trong file cấu hình hệ thống. GNU mô tả đây là file khởi động toàn cục — đường dẫn chính xác phụ thuộc vào prefix cài đặt. Các vị trí thường gặp:

  • /etc/wgetrc (đa số trình quản lý gói trên Linux)
  • /usr/local/etc/wgetrc (một số bản build Homebrew)
  • Đường dẫn hiển thị trong output wget --version ở mục "Wgetrc:"

Cách này hữu ích cho server dùng chung, Docker container, hoặc bất kỳ môi trường nào mà mọi user đều phải đi qua cùng một proxy.

Phương pháp 4: Biến môi trường (http_proxy / https_proxy)

export http_proxy=http://HOST:PORT/
export https_proxy=http://HOST:PORT/
export no_proxy=localhost,127.0.0.1,.internal.company.com

Chúng ảnh hưởng đến toàn bộ phiên shell của bạn — không chỉ riêng Wget. Các công cụ như curl cũng sẽ đọc chúng.

Cảnh báo quan trọng: Wget chỉ đọc biến môi trường ở dạng chữ thường. HTTP_PROXY (chữ hoa) sẽ bị bỏ qua âm thầm. Không lỗi, không cảnh báo, không gì cả. Tôi sẽ cho bạn xem output terminal chính xác ở phần lỗi thường gặp, nhưng điểm này đáng để nhớ ngay từ bây giờ.

Thứ tự ưu tiên của proxy: Cái nào ghi đè cái nào khi có nhiều cách cùng được đặt?

Nếu bạn vừa cấu hình proxy trong biến môi trường, vừa trong .wgetrc, lại vừa trên dòng lệnh, thì cái nào thắng? Chẳng ai giải thích rõ, nên tôi đã tự thử.

Đây là thứ tự ưu tiên đã được tài liệu hóa:

Mức ưu tiênPhương phápPhạm viGhi đè lên
1 (cao nhất)Cờ CLI -eMột lệnh duy nhấtTất cả
2~/.wgetrcNgười dùng hiện tạiCấu hình hệ thống + biến môi trường
3/etc/wgetrcToàn hệ thốngChỉ biến môi trường
4 (thấp nhất)Biến môi trường http_proxy / https_proxyPhiên shellKhông gì cả

Tôi đã xác minh điều này trên Wget 1.25.0 bằng cách đặt proxy xung đột ở từng mức. Khi môi trường trỏ tới cổng 3128, file cấu hình trỏ tới 3129, và CLI trỏ tới 3130:

  • Cấu hình thắng môi trường: Wget kết nối tới cổng 3129, bỏ qua 3128.
  • CLI thắng cấu hình: Wget kết nối tới cổng 3130, bỏ qua cả 3129 lẫn 3128.

Cửa thoát là --no-proxy. Nó bỏ qua mọi cấu hình proxy, bất kể được đặt ở đâu:

wget --no-proxy https://internal-server.company.com/report.pdf

Tình huống thực tế: sysadmin đã đặt proxy trong /etc/wgetrc, nhưng bạn cần truy cập trực tiếp một server nội bộ. Khi đó hãy dùng --no-proxy cho riêng lệnh đó thay vì sửa cấu hình hệ thống.

Cách dùng Wget với proxy có xác thực

auth-proxy-security-workflow.webp

Phần lớn proxy cho doanh nghiệp và hộ gia đình đều yêu cầu username và password. Wget hỗ trợ điều này theo hai cách, cả hai đều dùng HTTP Basic authentication cho thông tin xác thực proxy.

Nhúng thông tin đăng nhập trực tiếp trong URL proxy

wget -e use_proxy=on \
  -e http_proxy=http://USERNAME:PASSWORD@proxy.company.com:8080/ \
  http://example.com/file.zip

Cách này cũng hoạt động trong .wgetrc:

http_proxy = http://USERNAME:PASSWORD@proxy.company.com:8080/
https_proxy = http://USERNAME:PASSWORD@proxy.company.com:8080/

Dùng cờ --proxy-user--proxy-password

wget --proxy-user=USERNAME --proxy-password=PASSWORD \
  -e use_proxy=on \
  -e http_proxy=http://proxy.company.com:8080/ \
  http://example.com/file.zip

Các cờ này sẽ ghi đè mọi thông tin user:pass@ nhúng trong URL proxy.

Giữ an toàn cho thông tin xác thực

Cả hai cách đều có nguy cơ làm lộ credentials. GNU cảnh báo rằng password trên dòng lệnh có thể bị lộ qua ps hoặc các công cụ xem danh sách tiến trình. Cách giảm thiểu:

  • Máy một người dùng: Lưu credentials trong ~/.wgetrc và khóa file lại: chmod 600 ~/.wgetrc
  • Pipeline CI/CD: Dùng GitHub Actions encrypted secrets hoặc cơ chế tương đương của nền tảng bạn. Đưa chúng vào dưới dạng biến môi trường chữ thường trong định nghĩa bước chạy — tuyệt đối không hardcode trong YAML.
  • Build Docker: Đừng dùng ARG hoặc ENV cho secrets. Tài liệu Docker cảnh báo rõ rằng build arguments có thể tồn tại trong image cuối cùng. Hãy dùng BuildKit secret mounts.
  • Kiểm soát phiên bản: Tuyệt đối không commit .wgetrc có chứa credentials. Thêm nó vào .gitignore.

Một điểm riêng của Wget khi dùng với GitHub Actions: theo convention, tên secret thường được lưu ở dạng chữ hoa, nhưng biến môi trường bạn expose cho Wget phải là chữ thường (http_proxy, không phải HTTP_PROXY).

Cách dùng Wget với proxy trên Windows và phía sau tường lửa doanh nghiệp

Phần lớn bài viết về chủ đề này dừng ở câu “cài bằng Chocolatey là xong.” Nếu bạn đang dùng Windows hoặc ngồi sau proxy doanh nghiệp, đó mới chỉ là lúc rắc rối bắt đầu.

windows-pac-ntlm-config.webp

Windows tìm .wgetrc ở đâu

Tài liệu của GNU nói rằng Wget sẽ đọc $HOME/.wgetrc trừ khi biến môi trường WGETRC trỏ tới nơi khác. Trên Windows, $HOME có thể map tới %USERPROFILE% (ví dụ C:\Users\alice), nhưng cũng có thể không — tùy bạn dùng bản Chocolatey, bản MSYS2, Git Bash hay binary độc lập.

Khuyến nghị của tôi: đừng đoán mò, hãy dùng cờ --config để có hành vi chắc chắn:

wget --config=C:\Users\alice\wgetrc https://example.com/file.zip

Để kiểm tra xem build của bạn có đọc file cấu hình từ vị trí cụ thể hay không, hãy tạo một file test trỏ tới một proxy chắc chắn sai:

; C:\Users\alice\wget-test.rc
use_proxy = on
http_proxy = http://127.0.0.1:3128/

Sau đó chạy:

wget --config=C:\Users\alice\wget-test.rc --spider http://example.com/

Nếu Wget cố kết nối tới 127.0.0.1:3128, nghĩa là nó đã đọc file.

Đặt biến môi trường proxy trên Windows

CMD (chỉ cho phiên hiện tại):

set http_proxy=http://HOST:PORT/
set https_proxy=http://HOST:PORT/
wget http://example.com/

PowerShell (chỉ cho phiên hiện tại):

$env:http_proxy = "http://HOST:PORT/"
$env:https_proxy = "http://HOST:PORT/"
wget http://example.com/

Vĩnh viễn (qua cả reboot):

setx http_proxy http://HOST:PORT/
setx https_proxy http://HOST:PORT/

Sau setx, bạn phải mở một cửa sổ terminal mới. Phiên hiện tại sẽ không thấy thay đổi.

Những lỗi thường gặp với proxy doanh nghiệp: PAC file, xác thực NTLM và tìm địa chỉ proxy

Ba thứ này là những “bẫy” khiến người dùng doanh nghiệp vấp ngã nhiều nhất:

PAC file: Nhiều công ty dùng Proxy Auto-Configuration (PAC) file — các script viết bằng JavaScript để trình duyệt biết URL nào dùng proxy nào. Wget không có bộ diễn giải JavaScript, nên nó không thể đọc PAC file. Tài liệu của curl cũng nói điều tương tự. Cách xử lý: mở PAC file (hoặc hỏi IT), tìm kết quả PROXY host:port cho domain mục tiêu, rồi cấu hình địa chỉ tĩnh đó trong Wget.

Xác thực NTLM: Proxy authentication của Wget chỉ hỗ trợ Basic auth. Nếu proxy doanh nghiệp của bạn yêu cầu NTLM và bạn đang gặp lỗi 407 Proxy Authentication Required, đừng phí thời gian thử các biến thể --proxy-user khác nhau. Hãy cài Cntlm — một relay cục bộ xử lý xác thực NTLM/NTLMv2 và cung cấp giao diện Basic-auth cho Wget. Cntlm vẫn đang được duy trì (cập nhật gần nhất tháng 10/2025, khoảng 395 lượt tải mỗi tuần).

Sơ đồ quyết định cho người dùng proxy doanh nghiệp:

  1. Thử set http_proxy=http://YOUR_PROXY:PORT/ rồi chạy Wget.
  2. Nếu gặp lỗi 407 và công ty bạn dùng NTLM → cài Cntlm, cấu hình bằng thông tin domain của bạn, rồi trỏ Wget tới cổng cục bộ của Cntlm (thường là http://127.0.0.1:3128/).
  3. Nếu công ty dùng PAC file → trích xuất PROXY host:port thực sự từ PAC file hoặc hỏi IT địa chỉ proxy tĩnh.

Các cổng proxy doanh nghiệp phổ biến: 3128 (kiểu Squid), 8080 (HTTP proxy nói chung), 8888 (proxy phục vụ debug như Fiddler/Charles). Đây là quy ước, không phải cam kết.

Những lỗi thường gặp khi dùng Wget với proxy (kèm output lỗi thật)

Bây giờ là phần “đáng công chờ đợi” như tiêu đề đã hứa. Mọi output bên dưới đều được tái hiện trên Wget 1.25.0 (macOS, Homebrew) vào ngày 2026-06-01.

wget-troubleshooting-diagnostic-flow.webp

Lỗi 1: Thiếu tiền tố http://

Một số hướng dẫn cũ nói rằng cách này sẽ hỏng. Nhưng trên Wget 1.25.0, đặt http_proxy=127.0.0.1:3128 thực ra vẫn chạy — Wget sẽ tự động thêm http:// mà không báo gì:

Prepended http:// to '127.0.0.1:3128'
Spider mode enabled. Check if remote file exists.
--2026-06-01 10:38:15--  http://example.com/
Connecting to 127.0.0.1:3128... failed: Operation not permitted.

Nó vẫn kết nối đúng proxy. Tuy vậy, tôi vẫn khuyên luôn ghi rõ tiền tố http:// và thêm dấu gạch chéo cuối cùng. Cách này tránh nhập nhằng giữa các phiên bản Wget và làm cú pháp credentials (http://user:pass@host:port/) rõ ràng hơn.

Lỗi 2: use_proxy=yes so với use_proxy=on

Trong test của tôi với Wget 1.25.0, cả yes lẫn on đều chạy. Nhưng giá trị không hợp lệ sẽ báo lỗi rõ ràng:

wget: use_proxy: Invalid boolean 'true'; use `on' or `off'.

Hãy dùng on để tương thích rộng nhất — nó khớp với định dạng boolean được tài liệu hóa và cả gợi ý lỗi của Wget.

Lỗi 3: HTTP_PROXY viết hoa bị bỏ qua âm thầm

Đây là lỗi khó chịu nhất vì không hề có thông báo lỗi. Wget chỉ kết nối trực tiếp, cứ như thể bạn chưa hề đặt proxy.

Viết hoa (hỏng — không dùng proxy):

HTTP_PROXY=http://127.0.0.1:3128/ wget --no-config --spider http://example.com/
Spider mode enabled. Check if remote file exists.
--2026-06-01 10:40:06--  http://example.com/
Resolving example.com (example.com)... 198.18.58.61
Connecting to example.com (example.com)|198.18.58.61|:80... connected.
HTTP request sent, awaiting response... 200 OK

Viết thường (đúng — đã thử qua proxy):

http_proxy=http://127.0.0.1:3128/ wget --no-config --spider http://example.com/
Spider mode enabled. Check if remote file exists.
--2026-06-01 10:40:16--  http://example.com/
Connecting to 127.0.0.1:3128... failed: Connection refused.

Bạn thấy sự khác biệt chứ? Bản viết hoa đã resolve example.com trực tiếp. Bản viết thường mới thử dùng proxy. Không có cảnh báo ở cả hai trường hợp. curl cũng có một điểm tương tự — nó chấp nhận chữ hoa cho hầu hết biến proxy nhưng cố ý từ chối uppercase HTTP_PROXY vì lý do bảo mật.

Cách sửa: Luôn dùng chữ thường http_proxyhttps_proxy.

Lỗi 4: Proxy cũ trong .wgetrc gây lỗi "Connection Refused"

Nếu bạn (hoặc sysadmin của bạn, hoặc một Docker image) để lại địa chỉ proxy cũ trong file cấu hình, bạn sẽ thấy lỗi kiểu này:

Spider mode enabled. Check if remote file exists.
--2026-06-01 10:39:10--  http://example.com/
Connecting to 127.0.0.1:3128... failed: Connection refused.

Thông báo lỗi đang chỉ vào proxy cũ, chứ không phải website đích. Trình tự kiểm tra nên theo thứ tự ưu tiên sau:

  1. Kiểm tra lệnh của bạn xem có -e flags hoặc alias shell nào không
  2. Kiểm tra ~/.wgetrc (hoặc file được WGETRC trỏ tới)
  3. Kiểm tra cấu hình hệ thống (đường dẫn hiển thị bởi wget --version)
  4. Kiểm tra biến môi trường: env | grep -i proxy

Khi debug, --no-config là người bạn tốt nhất — nó bảo Wget bỏ qua mọi file cấu hình:

wget --no-config --spider http://example.com/

Nếu lệnh này chạy được, vấn đề nằm ở file cấu hình.

Lỗi 5: Nhầm lẫn cú pháp proxy cho HTTPS

Lỗi này rất nhiều người gặp. Khi bạn đặt https_proxy, URL của proxy thường vẫn là http://, không phải https://. Lý do là Wget gửi một request HTTP CONNECT qua proxy để tạo tunnel cho phiên HTTPS được mã hóa.

Đúng:

https_proxy=http://proxy.company.com:8080/
wget https://example.com/

Wget sẽ gửi CONNECT example.com:443 HTTP/1.1 tới proxy, rồi tunnel HTTPS qua đó.

Sai (với target URL HTTP nhưng endpoint proxy là HTTPS):

http_proxy=https://127.0.0.1:18082/
wget http://example.com/
Error in proxy URL https://127.0.0.1:18082/: Must be HTTP.

Wget 1.25.0 từ chối hẳn https:// làm URL proxy cho target HTTP. Hãy dùng https_proxy=http://HOST:PORT/ trừ khi tổ chức của bạn đã ghi rõ endpoint proxy HTTPS và bạn đã test thành công với bản Wget của mình.

Cheat sheet lệnh proxy cho Wget (tham khảo nhanh, nên lưu lại)

Hãy bookmark bảng này. Nó tổng hợp mọi flag và directive liên quan đến proxy của Wget vào một chỗ.

Flag / DirectiveNgữ cảnhVí dụGhi chú
-e use_proxy=onCLI-e use_proxy=onon là an toàn nhất; một số bản build cũng chấp nhận yes
-e http_proxy=CLI-e http_proxy=http://proxy:8080/Nên có tiền tố http:// và dấu / cuối
-e https_proxy=CLI-e https_proxy=http://proxy:8080/URL proxy thường vẫn là http:// ngay cả với đích HTTPS
--proxy-userCLI--proxy-user=adminGhi đè user:pass@ nhúng trong URL
--proxy-passwordCLI--proxy-password=secretCó thể thấy trong ps — tránh dùng trên hệ thống dùng chung
--no-proxyCLI--no-proxyBỏ qua TẤT CẢ cấu hình proxy từ mọi nguồn
--no-configCLI--no-configBỏ qua mọi file cấu hình — rất hữu ích khi debug
--config=FILECLI--config=/tmp/wgetrcChỉ rõ đường dẫn cấu hình — rất hợp cho Windows và CI
http_proxy.wgetrc / envhttp_proxy = http://proxy:8080/File cấu hình dùng khoảng trắng quanh =; biến môi trường dùng chữ thường
https_proxy.wgetrc / envhttps_proxy = http://proxy:8080/Định dạng giống http_proxy
ftp_proxy.wgetrc / envftp_proxy = http://proxy:8080/Dành cho tải FTP
no_proxy.wgetrc / envno_proxy = localhost,127.0.0.1,.corpDanh sách domain phân tách bằng dấu phẩy
proxy_user.wgetrcproxy_user = adminTương đương với --proxy-user
proxy_password.wgetrcproxy_password = secretBảo vệ file bằng chmod 600

Khi Wget + proxy không phải công cụ phù hợp (và nên dùng gì thay thế)

data-extraction-workflow.webp

Sau tất cả phần cấu hình proxy ở trên, đây là một góc nhìn hơi ngược đời: đôi khi bạn không nên cố dùng Wget.

Rất nhiều người tìm kiếm “wget proxy” thực ra không phải chỉ muốn tải một file đơn lẻ. Họ muốn thu thập dữ liệu có cấu trúc từ website — giá sản phẩm, danh sách liên hệ, tin đăng bất động sản — và họ mặc định dùng Wget vì đó là công cụ dòng lệnh họ quen. Vấn đề là Wget chỉ trả về HTML thô. Bạn vẫn phải phân tích, làm sạch và chuyển nó thành cấu trúc dữ liệu. Và nếu bạn đang xoay proxy để tránh bị chặn, lúc này bạn phải duy trì danh sách proxy, script tải, bộ parser và cả pipeline xuất dữ liệu.

Mục tiêu của bạnCông cụ phù hợp nhấtVì sao
Tải một file duy nhất qua proxywget với các flag proxyĐơn giản, chỉ một lệnh
Mirror một website hoặc thư mục qua proxywget --recursive + cấu hình proxyTải đệ quy là thế mạnh cốt lõi của Wget
Scrape dữ liệu có cấu trúc (bảng, danh sách, liên hệ)ThunderbitWget chỉ cho bạn HTML thô — bạn vẫn phải parse. AI của Thunderbit đọc trang và xuất dữ liệu có cấu trúc sang Excel, Google Sheets, Airtable hoặc Notion mà không cần code. Scraping trên cloud của Thunderbit xử lý xoay IP và cơ chế chống bot, nên bạn khỏi phải tự cấu hình proxy.
Gọi REST API qua proxycurlKiểm soát header tốt hơn, hỗ trợ JSON gốc, hỗ trợ SOCKS5
Thu thập dữ liệu định kỳ lâu dàiThunderbit Scheduled Scraper hoặc cron + wgetThunderbit thích nghi khi layout trang thay đổi; script cron + wget thường hỏng một cách âm thầm

Wget rất giỏi ở việc tải file. Nhưng quy trình kiểu “cấu hình proxy → xoay IP → tải HTML → viết parser → xuất ra bảng tính” có quá nhiều phần phải ghép lại khi thứ bạn thực sự muốn chỉ là một bảng dữ liệu. Nếu nghe giống trường hợp của bạn, Chrome extension của chúng tôi có thể xử lý toàn bộ pipeline chỉ trong hai cú nhấp. Để xem thêm về hướng tiếp cận này, hãy đọc các bài hướng dẫn của chúng tôi về AI web scrapingweb scraping không cần code.

Nhưng nếu mục tiêu của bạn là “tải file ZIP này qua proxy doanh nghiệp” — thì Wget vẫn là lựa chọn đúng, và giờ bạn đã biết cách cấu hình nó chuẩn xác.

Tóm tắt các ý chính

Bản ngắn gọn:

  • Bốn phương pháp, thứ tự ưu tiên rõ ràng: Cờ CLI ghi đè cấu hình người dùng, cấu hình người dùng ghi đè cấu hình hệ thống, cấu hình hệ thống ghi đè biến môi trường. --no-proxy ghi đè tất cả.
  • Luôn dùng chữ thường cho biến môi trường (http_proxy, không phải HTTP_PROXY). Chữ hoa sẽ bị bỏ qua âm thầm.
  • Luôn thêm http:// vào URL proxy, kể cả với https_proxy. Endpoint proxy là HTTP; nó tunnel HTTPS bằng CONNECT.
  • Dùng on cho giá trị boolean trong .wgetrc và các cờ -e. Đây là lựa chọn an toàn nhất giữa các phiên bản Wget.
  • Người dùng Windows: Dùng --config=C:\path\to\wgetrc để tránh mơ hồ về file cấu hình. Dùng set (CMD) hoặc $env: (PowerShell) cho biến proxy theo phiên.
  • Người dùng proxy doanh nghiệp: Wget không đọc được PAC file và không hỗ trợ NTLM auth gốc. Nếu cần, hãy dùng Cntlm làm relay cục bộ.
  • Hãy bookmark cheat sheet ở trên — nó sẽ giúp bạn khỏi phải đọc lại bài này mỗi lần quên tên flag.

Nếu mục tiêu thực sự của bạn là trích xuất dữ liệu có cấu trúc, Thunderbit hoặc curl có thể phù hợp hơn. Cuộc debug tốt nhất là cuộc debug bạn không bao giờ phải bắt đầu.

Câu hỏi thường gặp

1. Wget có hỗ trợ proxy SOCKS5 không?

Không. GNU Wget 1.x chỉ hỗ trợ proxy HTTP, HTTPS và FTP. Dự án Wget2 từng có yêu cầu tính năng SOCKS5, nhưng đây không phải là tùy chọn chuẩn đã được tài liệu hóa. Nếu cần SOCKS5, hãy dùng curl với scheme gốc socks5:// hoặc socks5h://, hoặc bọc Wget bằng proxychains4 để ép đi qua SOCKS.

2. Vì sao cấu hình proxy của tôi bị bỏ qua khi dùng HTTP_PROXY viết hoa?

Wget chỉ đọc các biến môi trường viết thường (http_proxy, https_proxy, ftp_proxy, no_proxy). Các biến viết hoa như HTTP_PROXY sẽ bị bỏ qua âm thầm — không lỗi, không cảnh báo. Đây là một trong những vấn đề phổ biến và khó chịu nhất vì bạn không hề thấy dấu hiệu nào báo sai. Hãy luôn dùng chữ thường.

3. Làm sao để bỏ qua proxy cho một số domain nhất định?

Dùng directive no_proxy, либо dưới dạng biến môi trường hoặc trong .wgetrc:

export no_proxy=localhost,127.0.0.1,.mycompany.com

Hoặc trong ~/.wgetrc:

no_proxy = localhost,127.0.0.1,.mycompany.com

Các domain được phân tách bằng dấu phẩy. Dấu chấm đầu (.mycompany.com) sẽ khớp với tất cả subdomain.

4. Tôi có thể dùng Wget với proxy xoay vòng không?

Bản thân Wget không có sẵn tính năng xoay proxy. Bạn có hai cách: dùng nhà cung cấp proxy tự xoay IP ở phía server (bạn luôn gọi cùng một gateway, nhưng IP đầu ra thay đổi), hoặc viết một shell script chọn ngẫu nhiên proxy từ danh sách rồi truyền qua -e http_proxy=... ở mỗi lần chạy. Với các nhu cầu phức tạp hơn — xoay vòng tự động, retry logic, xử lý anti-bot — một công cụ scraping chuyên dụng thường hợp lý hơn.

5. Sự khác nhau giữa http_proxyhttps_proxy trong Wget là gì?

http_proxy được dùng khi URL đích là http://. https_proxy được dùng khi URL đích là https://. Trong cả hai trường hợp, URL của proxy thường vẫn là địa chỉ http://. Với target HTTPS, Wget gửi một HTTP CONNECT request qua proxy để tạo tunnel, rồi việc mã hóa HTTPS thật sự diễn ra end-to-end giữa Wget và server đích. Proxy nhìn thấy hostname (từ CONNECT request) nhưng không đọc được dữ liệu đã mã hóa.

Dùng thử Thunderbit cho AI Web Scraping Get Started Free

Tìm hiểu thêm

Ke
Ke
CTO tại Thunderbit | Chuyên gia Khoa học Dữ liệu cấp cao & ML Với gần một thập kỷ kinh nghiệm trong học máy và khoa học dữ liệu, Ke Shen là cựu sinh viên Đại học Columbia và từng là Chuyên gia Khoa học Dữ liệu cấp cao tại Walmart Labs. Sở hữu chuyên môn sâu về Python, R, Java và Thống kê, được đồng nghiệp công nhận, anh chia sẻ những góc nhìn thực chiến về cách đưa các thuật toán AI phức tạp từ lý thuyết vào kiến trúc sẵn sàng cho môi trường sản xuất.
Topics
Công cụ Web ScrapingAI Web Scraper
Mục lục

Cào một trang web chỉ bằng cách hỏi

Nói bạn cần gì bằng tiếng Anh đơn giản. Hoặc tốt hơn, không cần nói gì cả.

Dùng Thunderbit ngay miễn phí
Trích xuất dữ liệu bằng AI
Dễ dàng chuyển dữ liệu sang Google Sheets, Airtable hoặc Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week