Hướng dẫn: Sử dụng Curl để tải xuống tệp từ command line trên Linux

0

Linux curl lệnh có thể làm được nhiều việc hơn là tải xuống tệp đơn thuần. Tìm hiểu những gì curl có thể làm, và khi nào bạn nên sử dụng nó thay vì wget.

Curl so với wget: Sự khác biệt là gì?

Mọi người thường tranh cãi để xác định các điểm mạnh của lệnh wgetcurl.

wget là một công cụ tuyệt vời để tải xuống nội dung và tệp. Nó có thể tải xuống các tệp, trang web và thư mục. Nó chứa các quy trình thông minh để duyệt các liên kết trong các trang web và tải xuống nội dung trên toàn bộ trang web.

curl đáp ứng một nhu cầu hoàn toàn khác nhau. Có, nó có thể truy xuất tệp, nhưng nó không thể điều hướng một trang web đang tìm kiếm nội dung để truy xuất. curl thực ra là cho phép bạn tương tác với các hệ thống từ xa bằng cách đưa ra các yêu cầu đối với các hệ thống đó, đồng thời truy xuất và hiển thị phản hồi của chúng cho bạn.

curl không giới hạn ở các trang web. curl hỗ trợ hơn 20 giao thức, bao gồm HTTP, HTTPS, SCP, SFTP và FTP. Và có thể nói, do khả năng xử lý vượt trội của Linux, curl có thể được tích hợp dễ dàng hơn với các lệnh và tập lệnh khác.

Cài đặt lệnh Curl

Trong số các máy tính được sử dụng để nghiên cứu bài viết này, Fedora 31 và Manjaro 18.1.0 có curl đã được cài đặt. curl phải được cài đặt trên Ubuntu 18.04 LTS. Trên Ubuntu, hãy chạy lệnh này để cài đặt nó:

sudo apt-get install curl

sudo apt-get install curl trong cửa sổ đầu cuối

Phiên bản lệnh curl

Các --version tùy chọn làm curlbáo cáo phiên bản của nó. Nó cũng liệt kê tất cả các giao thức mà nó hỗ trợ.

curl --version

curl --version trong cửa sổ đầu cuối

Truy xuất một trang web

Nếu chúng ta chỉ curl tại một trang web, nó sẽ truy xuất nó cho chúng tôi.

curl https://www.bbc.com

curl https://www.bbc.com trong cửa sổ đầu cuối

Nhưng hành động mặc định của nó là kết xuất vào cửa sổ đầu cuối dưới dạng mã nguồn.

Đầu ra từ cuộn hiển thị mã nguồn trang web trong cửa sổ đầu cuối

Coi chừng: Nếu bạn không viết curl muốn được lưu trữ dưới dạng tệp, nó sẽ luôn luôn kết xuất nó vào cửa sổ đầu cuối. Nếu tệp đang truy xuất là tệp nhị phân, kết quả có thể không thể đoán trước.

Lưu dữ liệu vào tệp

Yêu cầu curl chuyển hướng đầu ra thành một tệp:

curl https://www.bbc.com  > bbc.html

curl https://www.bbc.com> bbc.html trong cửa sổ dòng lệnh

Lần này chúng tôi không thấy thông tin truy xuất, nó được gửi thẳng đến tệp cho chúng tôi. Vì không có đầu ra cửa sổ đầu cuối để hiển thị, curl xuất ra một tập hợp thông tin tiến trình.

Nó không làm được điều này trong ví dụ trước vì thông tin tiến trình sẽ nằm rải rác khắp mã nguồn của trang web, vì vậy curl đã tự động xây dựng nó.

Trong ví dụ này, curl phát hiện rằng đầu ra đang được chuyển hướng đến một tệp và việc tạo thông tin tiến trình là an toàn.

cuộn đồng hồ đo tiến trình tải xuống trong cửa sổ đầu cuối

Thông tin được cung cấp là:

  • % Total: Tổng số tiền cần truy xuất.
  • % Received: Tỷ lệ phần trăm và giá trị thực tế của dữ liệu được truy xuất cho đến nay.
  • % Xferd: Phần trăm và thực tế đã gửi, nếu dữ liệu đang được tải lên.
  • Average Speed Dload: Tốc độ tải xuống trung bình.
  • Average Speed Upload: Tốc độ tải lên trung bình.
  • Time Total: Tổng thời gian chuyển giao ước tính.
  • Time Spent: Thời gian đã trôi qua cho lần truy xuất này.
  • Time Left: Thời gian ước tính còn lại để quá trình truy xuất thành công.
  • Current Speed: Tốc độ truyền hiện tại cho lần truy xuât này.

Vì chúng tôi đã chuyển hướng đầu ra từ curl vào một tệp, bây giờ chúng tôi có một tệp có tên “bbc.html”.

tệp bbc.html được tạo bởi curl.

Nhấp đúp vào tệp đó sẽ mở trình duyệt mặc định của bạn để nó hiển thị trang web đã truy xuất.

Trang web truy xuất được hiển thị trong cửa sổ trình duyệt.

Lưu ý rằng địa chỉ trong thanh địa chỉ của trình duyệt là một tệp cục bộ trên máy tính này, không phải là một trang web từ xa.

Chúng ta không cần phải chuyển hướng đầu ra để tạo một tệp. Chúng tôi có thể tạo một tệp bằng cách sử dụng -o (đầu ra) tùy chọn và nói curl để tạo tệp. Ở đây chúng tôi đang sử dụng -o và cung cấp tên của tệp mà chúng tôi muốn tạo “bbc.html.”

curl -o bbc.html https://www.bbc.com

curl -o bbc.html https://www.bbc.com trong cửa sổ dòng lệnh

Sử dụng thanh tiến trình để theo dõi tải xuống

Để thay thế thông tin tải xuống dựa trên văn bản bằng một thanh tiến trình đơn giản, hãy sử dụng -# (thanh tiến trình).

curl -x -o bbc.html https://www.bbc.com

curl -x -o bbc.html https://www.bbc.com trong cửa sổ dòng lệnh

Khởi động lại quá trình tải xuống bị gián đoạn

Có thể dễ dàng khởi động lại quá trình tải xuống đã bị kết thúc hoặc bị gián đoạn. Hãy bắt đầu tải xuống một tệp khá lớn. Chúng tôi sẽ sử dụng bản dựng Hỗ trợ dài hạn mới nhất của Ubuntu 18.04. Chúng tôi đang sử dụng --output tùy chọn để chỉ định tên của tệp mà chúng tôi muốn lưu nó vào: “ubuntu180403.iso.”

curl --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso

curl --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso trong một cửa sổ đầu cuối

Quá trình tải xuống bắt đầu và hoạt động theo cách của nó cho đến khi hoàn thành.

Dự đoán về một lượt tải xuống lớn trong một thiết bị đầu cuối

Nếu chúng tôi buộc phải làm gián đoạn quá trình tải xuống với Ctrl+C , chúng tôi sẽ quay lại command prompt và quá trình tải xuống bị hủy.

Để khởi động lại quá trình tải xuống, hãy sử dụng -C (tiếp tục tại) tùy chọn. Điều này gây ra curl để khởi động lại quá trình tải xuống tại một điểm được chỉ định hoặc bù lại trong tệp đích. Nếu bạn sử dụng dấu gạch ngang - như sự bù đắp, curl sẽ xem xét phần đã được tải xuống của tệp và xác định độ lệch chính xác để sử dụng cho chính nó.

curl -C - --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso

curl -C - --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso trong cửa sổ đầu cuối

Quá trình tải xuống được khởi động lại. curl báo cáo phần bù mà tại đó nó đang khởi động lại.

curl -C - --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso trong cửa sổ đầu cuối

Truy xuất tiêu đề HTTP

Với -I (đầu), bạn chỉ có thể truy xuất các tiêu đề HTTP. Điều này cũng giống như gửi lệnh HTTP HEAD đến máy chủ web.

curl -I www.twitter.com

curl -I www.twitter.com trong một cửa sổ đầu cuối

Lệnh này chỉ lấy thông tin; nó không tải xuống bất kỳ trang web hoặc tệp nào.

Đầu ra từ curl -I www.twitter.com trong một cửa sổ đầu cuối

Tải xuống nhiều URL

Sử dụng xargs chúng tôi có thể tải xuống nhiều URL cùng một lúc. Có lẽ chúng tôi muốn tải xuống một loạt các trang web tạo nên một bài viết hoặc hướng dẫn.

Sao chép các URL này vào trình chỉnh sửa và lưu vào tệp có tên “urls-to-download.txt”. Chúng ta có thể sử dụng xargs để coi nội dung của mỗi dòng của tệp văn bản như một tham số mà nó sẽ cấp curl, đến lượt mình.

https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#0
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#1
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#2
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#3
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#4
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#5

Đây là lệnh chúng ta cần sử dụng để có xargs chuyển các URL này tới curl cùng một lúc:

xargs -n 1 curl -O < urls-to-download.txt

Lưu ý rằng lệnh này sử dụng -O (tệp từ xa) lệnh đầu ra, sử dụng chữ hoa “O.” Tùy chọn này gây ra curl để lưu tệp đã truy xuất có cùng tên với tệp đó trên máy chủ từ xa.

Các -n 1 tùy chọn nói với xargs để coi mỗi dòng của tệp văn bản là một tham số duy nhất.

Khi chạy lệnh, bạn sẽ thấy nhiều lần tải xuống bắt đầu và kết thúc, lần lượt.

Đầu ra từ xargs và tải xuống nhiều tệp

Kiểm tra trong trình duyệt tệp cho thấy nhiều tệp đã được tải xuống. Mỗi cái mang tên nó có trên máy chủ từ xa.

tệp đã tải xuống sin trình duyệt tệp nautilus

Tải xuống tệp từ máy chủ FTP

Sử dụng curl với máy chủ File Transfer Protocol (FTP) thật dễ dàng, ngay cả khi bạn phải xác thực bằng tên người dùng và mật khẩu. Để chuyển tên người dùng và mật khẩu với curl sử dụng -u (người dùng) và nhập tên người dùng, dấu hai chấm “:” và mật khẩu. Không đặt dấu cách trước hoặc sau dấu hai chấm.

Đây là một máy chủ FTP miễn phí để thử nghiệm do Rebex lưu trữ. Trang web FTP thử nghiệm có tên người dùng được đặt trước là “demo” và mật khẩu là “password”. Không sử dụng loại tên người dùng và mật khẩu yếu này trên máy chủ FTP.

curl -u demo:password ftp://test.rebex.net

curl -u demo: mật khẩu ftp://test.rebex.net trong cửa sổ đầu cuối

curl tìm ra rằng chúng tôi đang trỏ nó vào một máy chủ FTP và trả về danh sách các tệp có trên máy chủ.

Danh sách các tệp trên máy chủ FTP remtoe trong cửa sổ đầu cuối

Tệp duy nhất trên máy chủ này là tệp “readme.txt”, có độ dài 403 byte. Hãy lấy nó. Sử dụng lệnh tương tự như một lúc trước, với tên tệp được thêm vào:

curl -u demo:password ftp://test.rebex.net/readme.txt

curl -u demo: mật khẩu ftp://test.rebex.net/readme.txt trong cửa sổ đầu cuối

Tệp được truy xuất và curl hiển thị nội dung của nó trong cửa sổ đầu cuối.

Nội dung của tệp được truy xuất từ ​​máy chủ FTP được hiển thị trong cửa sổ đầu cuối

Trong hầu hết các trường hợp, sẽ thuận tiện hơn nếu tệp đã truy xuất được lưu vào đĩa cho chúng tôi, thay vì hiển thị trong cửa sổ đầu cuối. Một lần nữa chúng ta có thể sử dụng -O (tệp từ xa) xuất lệnh để lưu tệp vào đĩa, với cùng tên tệp mà tệp có trên máy chủ từ xa.

curl -O -u demo:password ftp://test.rebex.net/readme.txt

curl -O -u demo: mật khẩu ftp://test.rebex.net/readme.txt trong cửa sổ đầu cuối

Tệp được truy xuất và lưu vào đĩa. Chúng ta có thể sử dụng ls để kiểm tra chi tiết tệp. Nó có cùng tên với tệp trên máy chủ FTP và có cùng độ dài, 403 byte.

ls -hl readme.txt

ls -hl readme.txt trong cửa sổ dòng lệnh

Gửi thông số tới máy chủ từ xa

Một số máy chủ từ xa sẽ chấp nhận các tham số trong các yêu cầu được gửi đến chúng. Ví dụ: các tham số có thể được sử dụng để định dạng dữ liệu trả về hoặc chúng có thể được sử dụng để chọn dữ liệu chính xác mà người dùng muốn truy xuất. Thường có thể tương tác với các giao diện lập trình ứng dụng web (API) bằng cách sử dụng curl.

Ví dụ đơn giản, trang web ipify có API có thể được truy vấn để xác định địa chỉ IP bên ngoài của bạn.

curl https://api.ipify.org

Bằng cách thêm format tham số cho lệnh, với giá trị là “json”, chúng ta có thể yêu cầu lại địa chỉ IP bên ngoài của mình, nhưng lần này dữ liệu trả về sẽ được mã hóa ở định dạng JSON.

curl https://api.ipify.org?format=json

curl https://api.ipify.org trong cửa sổ đầu cuối

Đây là một ví dụ khác sử dụng API Google. Nó trả về một đối tượng JSON mô tả một cuốn sách. Thông số bạn phải cung cấp là số International Standard Book Number (ISBN). Bạn có thể tìm thấy những thứ này trên bìa sau của hầu hết các cuốn sách, thường là bên dưới mã vạch. Tham số chúng tôi sẽ sử dụng ở đây là “0131103628.”

curl https://www.googleapis.com/books/v1/volumes?q=isbn:0131103628

curl https://www.googleapis.com/books/v1/volumes?q=isbn:0131103628 trong cửa sổ dòng lệnh

Dữ liệu trả về là toàn diện:

Dữ liệu API sách của Google được hiển thị trong cửa sổ dòng lệnh

Đôi khi curl, Đôi khi wget

Nếu tôi muốn tải xuống nội dung từ một trang web và có cấu trúc cây của trang web được tìm kiếm cho nội dung đó, tôi sẽ sử dụng wget.

Nếu tôi muốn tương tác với máy chủ từ xa hoặc API và có thể tải xuống một số tệp hoặc trang web, tôi sẽ sử dụng curl. Đặc biệt nếu giao thức là một trong nhiều giao thức không được hỗ trợ bởi wget.

Followeek đã mang tới câu trả lời thỏa đáng cho bạn chưa? Hãy để chúng tôi biết thêm cảm nhận của bạn ở dưới phần comment nhé!

Leave a Reply

Your email address will not be published. Required fields are marked *