Hướng dẫn đầy đủ về cách tải tệp bằng cURL
Tóm tắt được tạo bởi AI:
cURL hay Client URL là một công cụ được phát triển để truy xuất tệp, giao tiếp với API và thậm chí thử nghiệm tài nguyên web. Nó cũng có sẵn trên các hệ điều hành Windows, Mac và Linux, giúp người dùng cURL dễ dàng tải tệp. Client URL phù hợp cho việc tải tệp đơn giản cũng như các tác vụ nâng cao hơn liên quan đến xử lý dữ liệu và ngay cả việc nhúng kịch bản.
Trong bài viết này, chúng tôi sẽ hướng dẫn cách tải tệp bằng cURL, bao gồm một số lệnh cURL hữu ích để tải xuống, xác định tên tệp, thư mục, xử lý chuyển hướng, điều chỉnh tốc độ và nhiều hơn thế nữa. Chúng tôi cũng sẽ giới thiệu các lệnh dành riêng cho cURL trên hệ thống Windows, Linux và Mac.

Quản lý tên tệp
Việc chọn tên tệp chính xác khi lưu tài liệu đã tải xuống là điều cần thiết. cURL không lưu dữ liệu mà chỉ hiển thị chúng trên terminal. Do đó, nếu người dùng không chọn vị trí để lưu tệp, tệp sẽ không được tìm thấy trong hệ thống tệp.
Tất cả các lệnh với cURL được thực hiện trên dòng lệnh: trên Windows — cmd hoặc PowerShell và trên Linux hoặc macOS — terminal.
Để đặt tên tệp thủ công, người dùng sử dụng lệnh “-o” hoặc ở định dạng đầy đủ “--output”.
Xem ví dụ sau:
curl -o test.html https://example.com
Lệnh này sẽ truy xuất trang example.com và lưu nó thành test.html trong thư mục làm việc hiện tại.
Theo mặc định, cURL sẽ lưu tệp trong cùng thư mục chứa tệp thực thi trừ khi được chỉ định khác.
Làm thế nào để sử dụng cURL lưu tệp đồng thời chỉ định thư mục lưu tệp:
curl -o ~/Downloads/test.html https://example.com
Tùy chọn này sẽ đặt tệp vào thư mục con Downloads trong thư mục chính của người dùng.
Trong cấu hình này, nếu tệp đã tồn tại, tệp mới sẽ thay thế tệp cũ mà không có cảnh báo. Để tránh điều này, sử dụng cURL -O để tệp được lưu với tên được cung cấp trong URL:
curl -O https://example.com/file.txt
Nếu trong URL cung cấp file.txt, tệp sẽ tự động được lưu với tên đó. Nếu tệp đó đã tồn tại, nó sẽ bị ghi đè.
Để đảm bảo không mất mát dữ liệu, có thể đặt lời nhắc xác minh trước khi tải:
if [ -f file.txt ]; then
echo "File already exists!"
else
curl -O https://example.com/file.txt
fi
Đoạn script này sẽ quét xem tệp đã tồn tại hay chưa, chỉ tải xuống nếu tệp chưa tồn tại.
Xử lý chuyển hướng
Một số tệp không được lưu tại vị trí cụ thể mà được lấy qua chuyển hướng. Ví dụ, người dùng cURL cố tải tệp lớn có thể phát hiện trình duyệt chuyển hướng họ đến trang khác trước khi bắt đầu tải. Theo mặc định, cURL không theo chuyển hướng, nhưng có thể thay đổi.
Để cho cURL tự động theo chuyển hướng, thêm cờ -L:
curl -L -o test.zip https://example.com/download
Nếu máy chủ ban đầu chuyển hướng người dùng, cURL sẽ thực hiện yêu cầu mới trước và sau đó mới tải tệp từ URL.
Tại sao điều này quan trọng:
- Tránh phải qua các trang trung gian. Một số trang thực hiện chuyển hướng vì các lý do như giới hạn tải xuống, xác thực hoặc quảng cáo.
- Sử dụng URL rút gọn. Ví dụ, Bit.ly hoặc TinyURL,… nếu không có -L, cURL sẽ tải trang HTML với chuyển hướng thay vì tệp thực.
- Hỗ trợ chuyển tiếp HTTPS. Một số trang sẽ chuyển tất cả yêu cầu http:// sang https://. Nếu không dùng -L, tải tệp sẽ không hoạt động.
Phương thức của cURL xử lý từng chuyển hướng theo thứ tự, theo mọi liên kết dẫn đến URL khác theo trình tự cho đến khi đạt liên kết mục tiêu. Trong trường hợp máy chủ mắc kẹt trong vòng lặp chuyển hướng vô tận, quá trình sẽ dừng. cURL có lệnh quản lý số lượng chuyển hướng là '--max-redirs'.
curl -L --max-redirs 5 -o file.zip https://example.com/download
Tham số này đặt giới hạn cho cURL, nếu xử lý quá nhiều chuyển hướng vượt quá giới hạn, quá trình tải sẽ dừng.
Ví dụ cURL đưa ra khi vượt giới hạn chuyển hướng là:
curl: (47) Maximum redirection limit reached
Tải nhiều tệp
Sử dụng cURL bạn có thể tải đồng thời nhiều tệp, với một số lệnh hoạt động trên nhiều hệ điều hành, trong khi những lệnh khác sẽ dành riêng cho Windows hoặc Linux/macOS.
Cách chung cho mọi hệ điều hành
- Nếu máy chủ chứa nhiều tệp, bạn chỉ cần thêm đủ các lệnh
-Otheo nhu cầu:curl -O https://example.com/file1.zip -O https://example.com/file2.zip - Nếu các tệp được đánh số tuần tự như file1.zip, file2.zip, file3.zip, bạn có thể đặt tên tệp trong ngoặc nhọn:
curl -O https://example.com/file{1,2,3}.zip
Đối với Windows
- Với cURL trên Windows, nếu người dùng có tệp văn bản chứa danh sách URL như urls.txt, họ có thể tải tệp bằng dòng lệnh:
Get-Content urls.txt | ForEach-Object { curl -O $_ } - Nếu các tệp được đánh số, bạn có thể sử dụng vòng lặp:
For ($i=1; $i -le 3; $i++) { curl -O "https://example.com/file$i.zip" }
Đối với Linux và macOS
- Tải từ danh sách.
Để bắt đầu, tạo tệp urls.txt chứa danh sách liên kết:
https://example.com/file1.zip https://example.com/file2.zip https://example.com/file3.zipSau đó chạy lệnh:
xargs -n 1 curl -O < urls.txt - Tải trong vòng lặp (Bash).
Trong trường hợp các tệp được đánh số, bạn có thể sử dụng vòng lặp for:
for i in {1..5}; do curl -O https://example.com/file$i.zip done
Giới hạn tốc độ
Khi cần tải tệp lớn bằng cURL và lưu lượng băng thông thấp được dự kiến, cờ --limit-rate có sẵn, giúp giới hạn tốc độ tải xuống ở (k) kilobyte mỗi giây, (m) megabyte mỗi giây, hoặc (g) gigabyte mỗi giây.
Với người dùng cURL, cấu trúc lệnh giống nhau trên mọi hệ điều hành:
curl --limit-rate 500k -O https://example.com/archive.zip
Trong trường hợp này, 500k có nghĩa là tốc độ tải không vượt quá 500 KB/s.
Các chú ý khác:
- --limit-rate 2m - giới hạn 2 MB/s;
- --limit-rate 100k - giới hạn 100 KB/s.
Tại đây, một tập lệnh mẫu để tải xuống archive1.zip, archive2.zip và archive3.zip tất cả với tốc độ tải xuống 500 KB/s.
Windows (PowerShell):
1..3 | ForEach-Object { curl --limit-rate 500k -O https://example.com/archive$_.zip }
Linux/macOS (Bash):
for i in {1..3}; do
curl --limit-rate 500k -O https://example.com/archive$i.zip
done
Tùy chọn --limit-rate có hiệu quả trong điều kiện kết nối mạng ổn định vì nó giảm thiểu khả năng gián đoạn mạng. Điều này hữu ích khi nhiều tệp đang được tải xuống cùng lúc hoặc khi có các hoạt động khác đang diễn ra trên mạng. Ngoài ra, --limit-rate giúp giảm khả năng bị chặn bởi các máy chủ có hạn chế tải xuống. Khi tải qua proxy, tham số này giúp giảm tải và tối thiểu hóa khả năng bị ngắt kết nối. Lệnh này cũng hỗ trợ quản lý lưu lượng khi sử dụng internet di động hoặc các gói cước có giới hạn dữ liệu.
Tải im lặng
Trong cURL, tiến trình tải xuống cùng với tốc độ của nó được hiển thị trong cửa sổ terminal theo mặc định. Điều này hữu ích cho một số người dùng cURL, tuy nhiên có thể bị tắt cho các script hoặc quy trình tự động. Trong những trường hợp này, có thể bật cờ -s hoặc --silent.
Ví dụ cách sử dụng dòng lệnh cURL ở “chế độ im lặng” để tải tệp:
curl -s -O https://example.com/file.zip
Như lệnh cho thấy, tất cả các tệp sẽ được tải xuống với cURL mà không hiển thị bất kỳ thông tin nào trên màn hình. Nếu chỉ cần hiển thị lỗi và tắt tất cả các thông báo khác, có thể sử dụng -S (--show-error) kết hợp với các đối s ố trên:
curl -s -S -O https://example.com/file.zip
Xác thực
Việc tải một số tệp và sử dụng một số API yêu cầu xác thực. cURL có kiến trúc hỗ trợ nhiều phương thức xác thực như sử dụng tên người dùng và mật khẩu, hoặc thậm chí token truy cập.
Nếu cần tên người dùng và mật khẩu, chúng có thể được gửi dưới dạng một đối số với cờ -u:
curl -u username:password -O https://example.com/protected-file.zip
Nếu mật khẩu mang các thành phần đặc biệt như, ví dụ, @, #, &, v.v., thì nên đặt mật khẩu vào dấu ngoặc kép:
curl -u username:"your@password#123" -O https://example.com/protected-file.zip
Trong trường hợp chỉ gửi tên người dùng, cURL sẽ yêu cầu nhập mật khẩu.
Một phương thức khác để xác thực với hệ thống phát hành là sử dụng token truy cập, trong trường hợp này token được bao gồm trong header của yêu cầu như sau:
curl -H "Authorization: Bearer your_token_here" -O https://api.example.com/data.json
Một số dịch vụ có thể yêu cầu token được đưa trực tiếp vào URL. Khi đó lệnh sẽ như sau:
curl -O https://api.example.com/data.json?access_token=your_token_here
Dù sao, việc đưa token vào URL có thể gây vấn đề vì đường dẫn của người dùng có thể được lưu trong lịch sử trình duyệt hoặc log của máy chủ.
Các phương thức xác thực này rất hiệu quả khi cần lấy dữ liệu từ các tệp trên máy chủ được bảo vệ, yêu cầu dữ liệu từ API hoặc truy cập dữ liệu trong môi trường doanh nghiệp.
Tải qua proxy
Proxy đặc biệt hữu ích cho cURL và thường được dùng cho truy cập tệp từ xa vì cURL hỗ trợ truyền dữ liệu qua hầu hết các giao thức.
Đặt proxy bằng cờ -x (hoặc --proxy).
Cấu trúc chung của lệnh như sau:
curl -x [scheme://]proxy-server[:port] -o output.file URL
Ví dụ: tải tệp qua proxy HTTP:
curl -x http://proxy.testnet.com:80 -o file.zip https://example.com/archive.zip
Ở đâu:
- -x http://proxy.testnet.com:80 - chỉ định proxy HTTP cần thiết và cổng mà nó sẽ sử dụng;
- -o archive.zip - cho biết tên tệp để lưu trữ nó dưới;
- https://example.com/archive.zip - vị trí của tập tin đang được tải xuống.
Khi tên người dùng và mật khẩu được yêu cầu cho các máy chủ proxy, chúng có thể được sử dụng như thế này:
curl -x http://proxy.example.com:80 -U user:password -o archive.zip https://example.com/archive.zip
Một cách tiếp cận khác - vượt qua xác thực thông qua URL:
curl -x http://user:password@proxy.example.com:80 -o archive.zip https://example.com/archive.zip
Để làm việc với SOCKS5 hoặc SOCKS4, hãy đặt tham số --proxy với loại, ví dụ:
curl --proxy socks5h://proxy.example.com:1080 -o archive.zip https://example.com/archive.zip
Màu sắc quan trọng:
- socks5h:// - cho phép truyền các truy vấn DNS thông qua tính ẩn danh cao hơn proxy;
- socks5:// - truyền trực tiếp các truy vấn DNS (kém an toàn).
Proxy sẽ cung cấp tính ẩn danh vì địa chỉ IP ban đầu sẽ không có sẵn cho các trang web truy cập người dùng. Ngoài ra, các khối được đặt trên các tài nguyên từ các khu vực nhất định có thể được bỏ qua n ếu nó được truy cập từ một quốc gia khác. Bằng cách sử dụng proxy để tải xuống các tệp, người dùng từ các mạng công ty có thể truy cập các tài nguyên đóng và cải thiện tốc độ tải do hạn chế từ nhà cung cấp hoặc bộ nhớ đệm dữ liệu.
Theo dõi tiến trình
Nên duy trì cảnh báo để giám sát đúng quá trình tải xuống các tệp bằng cURL, đặc biệt là với các tệp lớn hơn. Điều này có thể được thực hiện bằng cách sử dụng các khả năng tích hợp bao gồm các màn hình tiến trình như thanh tải xuống tương tác cũng như chi tiết.
Flag -# hoặc --progress-bar sẽ thay thế chỉ số phần trăm cơ bản bằng một thanh tiến trình động. Điều này hữu ích khi cần đo hiệu suất hệ thống ở dạng gọn gàng và đồ họa hơn.
curl -# -o file.zip https://example.com/file.zip
Thanh tiến trình với chỉ báo đang lấp đầy chuyển động từ trái sang phải:
![]()
Phương pháp này tiện lợi khi bạn muốn theo dõi quá trình với giới hạn thông tin được hiển thị.
Để quan sát chi tiết hơn về tốc độ, thời gian và khối lượng dữ liệu đang được tải xuống, bạn có thể sử dụng kết hợp các tùy chọn -v và -w.
- Ví dụ với -v (thêm một số chi tiết trong đầu ra):
curl -v -o file.zip https://example.com/file.zip - Để hiển thị các chỉ số chính sau khi hoàn thành tải xuống, bạn cần đặt định dạng với -w:
curl -o file.zip -w "Download speed: %{speed_download} bits per second\n" https://example.com/file.zip
Điều này cho phép giám sát tốc độ tải xuống trong suốt quá trình.
Đối với các trường hợp kết nối không ổn định, tốc độ tải xuống có thể được đánh giá chặt chẽ. Nếu có sự cản trở, sẽ có một sự sụt giảm đột ngột về tốc độ của quá trình hoặc sự suy giảm hoàn toàn. Khi kết nối ổn định, tốc độ và hiệu suất tổng thể của mạng có thể được theo dõi.
Thông tin Yêu cầu/Phản hồi
Lệnh cURL cho phép thu thập rất nhiều thông tin giúp xác định các vấn đề như ngắt kết nối, xác nhận, hoặc ngay cả mã phản hồi HTTP, rất quan trọng trong việc chẩn đoán lỗi. Để mục đích này, ta sử dụng flag -v để bật chế độ đầu ra mở rộng.
Ví dụ:
curl -v -o file.zip https://example.com/archive.zip
Kết quả đầu ra khi thực thi lệnh sẽ trông như sau:

Bạn sẽ thấy các dữ liệu chính sau đây:
- địa chỉ IP của máy chủ và thiết lập kết nối;
- yêu cầu HTTP gốc;
- trạng thái phản hồi của máy chủ;
- các tiêu đề phản hồi bao gồm loại nội dung, ngày và một số tham số bộ nhớ đệm.
Chi tiết yêu cầu và phản hồi từ máy chủ có thể được xem với cURL bằng cách thêm flag -v. Điều này cho bạn góc nhìn về cách client giao tiếp với server. Ví dụ, trong trường hợp chuyển hướng, nếu server thay đổi vị trí đến URL mới, “-v” sẽ hiển thị sử dụng lệnh “status 301 Moved Permanently” hoặc “302 Found”.
Flag này cũng có thể dùng để kiểm tra lỗi như “403 Forbidden” hoặc “404 Not Found”, biểu thị truy cập bị giới hạn hoặc thiếu tệp. Ngoài ra, các header phản hồi cũng có thể được kiểm tra để phân tích các tham số tệp trước khi quá trình tải xuống diễn ra.
cURL vs Wget
cURL và Wget là hai công cụ nổi bật nhất để tải xuống tệp trên giao diện dòng lệnh và cURL và WGET được sử dụng rộng rãi cho mục đích đó, nhưng chúng khác nhau về chức năng.
Hơn nữa, chúng ta hãy xem xét sự khác biệt chính giữa chúng.
Wget và cURL cũng khác nhau về cú pháp lệnh:
- Trong cURL, cần chỉ rõ các cờ khi sử dụng lệnh m ột cách rõ ràng: sử dụng -O để lưu tệp, -C - để tiếp tục tải xuống và -L để theo dõi chuyển hướng. Nếu không chỉ định tùy chọn lưu tệp, cURL mặc định sẽ in nội dung tệp lên màn hình terminal.
- Trong Wget, các lệnh đơn giản; tệp được tải xuống tự động mà không cần cờ bổ sung, tiếp tục tải bằng -c và chuyển hướng tự động.
Có vẻ như Wget chủ yếu được tạo ra để tải tệp, trong khi cURL được thiết kế để tương tác với yêu cầu HTTP và API.
Xét về giao thức được hỗ trợ, Wget gặp bất lợi so với cURL ở nhiều khía cạnh.

Kết luận
Thật vậy, cURL đáng ngưỡng mộ với việc hỗ trợ nhiều giao thức, cách đặt tên tệp, sử dụng proxy và khả năng tiếp tục tải xuống khi bị gián đoạn.
cURL không chỉ phù hợp với việc tải xuống đơn giản tích hợp với API hoặc thực hiện thu thập dữ liệu quy mô lớn. Khả năng chuyển hướng, đặt giới hạn tốc độ, xác thực và theo dõi tương tác với máy chủ, cho phép chẩn đoán kết nối và kiểm thử tài nguyên web biến nó thành một công cụ đa năng tuyệt vời. Với việc tùy biến tham số linh hoạt, cURL có thể được điều chỉnh để phù hợp với mọi nhiệm vụ.
