Sử dụng curl
và wget
để tải tệp
1. Làm quen với curl
Bạn đã bao giờ gặp trường hợp trong buổi phỏng vấn, họ yêu cầu bạn tải file từ internet qua terminal nhưng bạn chỉ nhìn chằm chằm vào màn hình và nhận ra rằng mình quên cách làm chưa? Hôm nay, mình sẽ hướng dẫn cách sử dụng curl
và wget
, các công cụ sẽ trở thành bạn đồng hành đáng tin cậy của bạn để làm việc với dữ liệu mạng.
Các công cụ này cho phép tải trang web, tải file, gửi HTTP request, làm việc với API và thậm chí chạy các script tự động hóa. Hãy cùng tìm hiểu về chức năng, ưu điểm và các trường hợp điển hình để sử dụng chúng.
curl
— là một công cụ dòng lệnh để truyền dữ liệu qua các giao thức mạng. Điểm mạnh chính của curl
là sự linh hoạt của nó: hỗ trợ hơn 20 giao thức (HTTP, HTTPS, FTP, SCP và cả SMTP). Theo ý kiến của các nhà phát triển, đây là một "dao đa năng Thụy Sĩ" tuyệt vời cho công việc với internet.
Cú pháp cơ bản của curl
curl [lựa chọn] URL
Nói đơn giản, bạn chỉ cần nhập lệnh curl
, chỉ định địa chỉ cần thiết — và thưởng thức kết quả. Hãy cùng xem cách nó hoạt động nào.
Tải trang web
Giả sử bạn muốn tải trang chính của Google. Làm như sau:
curl http://www.google.com
Trên màn hình, bạn sẽ thấy mã HTML của trang. Rất hữu ích nếu bạn muốn nghiên cứu cấu trúc của trang web hoặc tự động hóa điều gì đó liên quan đến nó.
Lưu nội dung vào file
Nếu bạn không thích dòng text này trên terminal, bạn có thể lưu kết quả vào file:
curl -o google.html http://www.google.com
Tham số -o
(output) báo cho curl
rằng bạn muốn chuyển hướng output vào file. Bây giờ mã HTML của trang đã được lưu trong google.html
. Muốn đùa một chút không? Gửi file này cho bạn bè và nói rằng bạn đã "tải toàn bộ internet".
Tải file
Hãy tưởng tượng bạn cần tải file nào đó từ internet (ví dụ, một file .zip
). curl
sẽ làm rất tốt điều này:
curl -O http://example.com/file.zip
Khác với -o
, tham số -O
sẽ lưu file với tên gốc được chỉ định trong URL. Điều này rất hữu ích khi bạn tải nhiều file từ cùng một nguồn.
Xác thực HTTP
Đôi khi, việc truy cập vào file hoặc tài nguyên API yêu cầu login và mật khẩu. Khi đó, hãy sử dụng curl
với tham số -u
:
curl -u username:password http://example.com/private-data
Điều này đặc biệt hữu ích khi làm việc với các API đóng, ví dụ như GitHub hoặc Docker Registry.
Tải qua API
Một trong những khả năng tuyệt vời nhất của curl
là làm việc với API. Giả sử bạn cần gửi một request tới server để nhận dữ liệu ở định dạng JSON:
curl -X GET "https://api.exchangerate-api.com/v4/latest/USD"
Ở đây, tham số -X
chỉ định phương thức HTTP request (GET, POST, DELETE, v.v.). Để tự động hóa tích hợp với các dịch vụ bên ngoài, đây thực sự là một công cụ quý báu.
2. wget
là gì?
Nếu curl
là "dao Thụy Sĩ", thì wget
là "máy ủi". Nhiệm vụ chính của nó là tải file. Điểm khác biệt chính với curl
là wget
được thiết kế đặc biệt để tải các file lớn một cách đáng tin cậy và hỗ trợ tiếp tục tải khi bị gián đoạn, rất tiện lợi khi kết nối mạng kém.
Cú pháp chính của wget
wget [tùy_chọn] URL
Tải file đơn giản
wget http://example.com/file.zip
Lệnh này sẽ tải file và lưu nó với tên gốc trong thư mục hiện tại. Rất đơn giản và hiệu quả.
Lưu với tên khác
Nếu bạn không thích tên gốc của file, bạn có thể đặt tên mới:
wget -O newfile.zip http://example.com/file.zip
Tiếp tục tải
Giả sử bạn đang tải một file khổng lồ, nhưng kết nối bị gián đoạn. Không vấn đề: chỉ cần sử dụng cờ -c
(continue):
wget -c http://example.com/largefile.iso
wget
sẽ tiếp tục tải từ điểm mà nó bị dừng. Điều này hoạt động ngay cả sau vài ngày, nếu máy chủ hỗ trợ chế độ này.
Tải toàn bộ website
Đúng vậy, với wget
bạn có thể tải toàn bộ website (hoặc một bản sao của nó). Chỉ cần sử dụng tùy chọn --mirror
:
wget --mirror http://example.com
Lệnh này sẽ tải website với cấu trúc thư mục được giữ nguyên. Giờ đây, bạn có một "bản sao" của website để sử dụng khi offline.
3. So sánh curl
và wget
Chức năng | curl | wget |
---|---|---|
Hỗ trợ nhiều giao thức | Có | Chỉ HTTP/HTTPS và FTP |
Tự động tiếp tục tải | Không (có thể script hóa) | Có |
Làm việc với API | Có | Không |
Dễ dàng quản lý file | Trung bình | Xuất sắc |
Tải toàn bộ trang web | Không | Có |
Nói chung, nếu bạn cần làm việc với API hoặc thứ gì đó cụ thể, hãy sử dụng curl
. Còn nếu bạn cần tải file — wget
sẽ là lựa chọn tốt nhất.
4. Ứng dụng thực tế
Tải xuống và xử lý file
Kết hợp wget
với kỹ năng xử lý văn bản của chúng ta:
wget -O data.txt http://example.com/data.txt
cat data.txt | grep "keyword" | awk '{print $2, $4}'
Ở đây, chúng ta đã tải file, lọc các dòng theo từ khóa và lấy các cột cần thiết.
Làm việc với API
Tải tỷ giá hối đoái bằng curl
và tìm loại tiền tệ cần thiết:
curl -s "https://api.exchangerate-api.com/v4/latest/USD" | grep "EUR"
Điều này hữu ích nếu bạn muốn xây dựng một hệ thống trao đổi tiền tệ tự động hóa.
Tự động hóa cập nhật
Hãy tưởng tượng bạn cần tải file cập nhật hàng ngày. Đây là một ví dụ về script đơn giản:
#!/bin/bash
wget -O updates.zip http://example.com/daily-updates.zip
unzip -o updates.zip -d /path/to/updates
Lưu script và thêm nó vào cron
. Giờ thì nó sẽ được thực hiện tự động — thật tiện lợi, đúng không?
5. Lỗi thường gặp và đặc điểm
Lỗi 403 (Forbidden):
Điều này xảy ra nếu server yêu cầu header bổ sung (vd., User-Agent). Khắc phục như sau:
curl -A "Mozilla/5.0" http://example.com
Chuyển hướng:
Nếu server chuyển bạn đến một URL khác, thêm flag -L
vào curl
:
curl -L http://example.com
Lỗi SSL:
Đôi khi wget
hoặc curl
sẽ kêu ca về SSL. Có thể tắt kiểm tra chứng nhận (nhưng không an toàn!):
wget --no-check-certificate https://example.com
curl -k https://example.com
Với kho vũ khí mạnh mẽ này, bạn đã sẵn sàng chinh phục internet bằng terminal. Bây giờ không có file hay API nào có thể trốn thoát khỏi bạn — đến lúc tải, xử lý và tự động hóa!
GO TO FULL VERSION