CodeGym /Các khóa học /Docker SELF /Sử dụng `curl` và `wget` để tải tệp

Sử dụng `curl` và `wget` để tải tệp

Docker SELF
Mức độ , Bài học
Có sẵn

Sử dụng curlwget để 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 curlwget, 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 curlwget đượ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 curlwget

Chức năng curl wget
Hỗ trợ nhiều giao thức Chỉ HTTP/HTTPS và FTP
Tự động tiếp tục tải Không (có thể script hóa)
Làm việc với API 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

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!

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION