Cách tải xuống tệp bằng cURL
Client URL, hoặc cURL, là một thư viện và tiện ích dòng lệnh để truyền dữ liệu giữa các hệ thống. Nó hỗ trợ nhiều giao thức và có xu hướng được cài đặt mặc định trên nhiều hệ điều hành giống Unix. Vì tính khả dụng chung của nó, nó là một lựa chọn tuyệt vời khi bạn cần tải file xuống hệ thống local của bạn , đặc biệt là trong môi trường server .
Trong hướng dẫn này, bạn sẽ sử dụng lệnh curl
để download file văn bản từ web server . Bạn sẽ xem nội dung của nó, lưu local và yêu cầu curl
làm theo các chuyển hướng nếu các file đã được di chuyển.
Download các file từ Internet có thể nguy hiểm, vì vậy hãy đảm bảo bạn đang download từ các nguồn uy tín. Trong hướng dẫn này, bạn sẽ download các file từ DigitalOcean và bạn sẽ không thực thi các file nào bạn download .
Bước 1 - Tìm nạp file từ xa
Ngoài hộp, không có bất kỳ đối số dòng lệnh nào, lệnh curl
sẽ tìm nạp một file và hiển thị nội dung của nó ở kết quả chuẩn.
Hãy thử bằng cách download robots.txt
từ Digitalocean.com:
- curl https://www.digitalocean.com/robots.txt
Bạn sẽ thấy nội dung của file được hiển thị trên màn hình:
OutputUser-agent: *
Disallow:
sitemap: https://www.digitalocean.com/sitemap.xml
sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz
sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz
sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz
Cung cấp cho curl
một URL và nó sẽ tìm nạp tài nguyên và hiển thị nội dung của nó.
Lưu file từ xa
Tìm nạp một file và hiển thị nội dung của nó đều tốt và tốt, nhưng nếu bạn thực sự muốn lưu file vào hệ thống của bạn thì sao?
Để lưu file từ xa vào hệ thống local của bạn, có cùng tên file với server mà bạn đang download , hãy thêm đối số --remote-name
hoặc sử dụng tùy chọn -O
:
- curl -O https://www.digitalocean.com/robots.txt
Tệp của bạn sẽ download :
[secondary_label Output
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 286 0 286 0 0 5296 0 --:--:-- --:--:-- --:--:-- 5296
Thay vì hiển thị nội dung của file , curl
hiển thị đồng hồ đo tiến trình dựa trên văn bản và lưu file vào tên giống với tên của file từ xa. Bạn có thể kiểm tra mọi thứ bằng lệnh cat
:
- cat robots.txt
Tệp chứa cùng nội dung bạn đã thấy trước đây:
[secondary_label Output
User-agent: *
Disallow:
sitemap: https://www.digitalocean.com/sitemap.xml
sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz
sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz
sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz
Bây giờ ta hãy xem xét việc chỉ định tên file cho file đã download .
Bước 2 - Lưu các file từ xa với một tên file cụ thể
Bạn có thể đã có một file local có cùng tên với file trên server từ xa.
Để tránh overrides lên file local có cùng tên, hãy sử dụng đối số -o
hoặc --output
, theo sau là tên của file local mà bạn muốn lưu nội dung.
Thực thi lệnh sau để tải robots.txt
từ xa xuống robots.txt
do-bots.txt
có tên local :
- curl -o do-bots.txt https://www.digitalocean.com/robots.txt
, bạn sẽ thấy thanh tiến trình:
Output % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 286 0 286 0 0 6975 0 --:--:-- --:--:-- --:--:-- 7150
Bây giờ sử dụng lệnh cat
để hiển thị nội dung của do-bots.txt
để xác minh đó là file bạn đã download :
- cat do-bots.txt
Nội dung giống nhau:
OutputUser-agent: *
Disallow:
sitemap: https://www.digitalocean.com/sitemap.xml
sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz
sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz
sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz
Theo mặc định, curl
không tuân theo các chuyển hướng, vì vậy khi các file di chuyển, bạn có thể không nhận được những gì bạn mong đợi. Hãy xem cách khắc phục điều đó.
Bước 3 - Chuyển hướng sau
Lúc này, tất cả các ví dụ đều bao gồm các URL đủ điều kiện bao gồm giao thức https://
. Nếu bạn tình cờ cố gắng tìm nạp robots.txt
và chỉ được chỉ định www.digitalocean.com
, bạn sẽ không thấy bất kỳ kết quả nào vì DigitalOcean chuyển hướng yêu cầu từ http://
thành https://
:
Bạn có thể xác minh điều này bằng cách sử dụng cờ -I
, cờ hiển thị các tiêu đề yêu cầu thay vì nội dung của file :
- curl -I www.digitalocean.com
Kết quả cho thấy URL đã được chuyển hướng. Dòng đầu tiên của kết quả cho bạn biết rằng nó đã được di chuyển và dòng Location
cho bạn biết vị trí:
[secondary_label Output
HTTP/1.1 301 Moved Permanently
Date: Wed, 26 Aug 2020 19:01:33 GMT
Connection: keep-alive
Cache-Control: max-age=3600
Expires: Wed, 26 Aug 2020 20:01:33 GMT
Location: https://www.digitalocean.com/robots.txt
cf-request-id: 04cdbea7a40000c5cc8d34d200000001
Server: cloudflare
CF-RAY: 5c8fcd52aea0c5cc-EWR
Bạn có thể sử dụng curl
để thực hiện một yêu cầu khác theo cách thủ công hoặc bạn có thể sử dụng --location
hoặc -L
đối số cho curl
thực hiện lại yêu cầu đến vị trí mới khi nào nó gặp phải chuyển hướng. Hãy thử một lần:
- curl -L www.digitalocean.com/robots.txt
Lần này bạn thấy kết quả , khi curl
theo sau chuyển hướng:
OutputUser-agent: *
Sitemap: https://www.digitalocean.com/sitemap.xml
Bạn có thể kết hợp đối số -L
với một số đối số đã nói ở trên để tải file xuống hệ thống local của bạn:
- curl -L -o do-bots.txt www.digitalocean.com/robots.txt
Cảnh báo : Nhiều tài nguyên trực tuyến sẽ yêu cầu bạn sử dụng curl
để download các tập lệnh và thực thi chúng. Trước khi bạn chạy bất kỳ tập lệnh nào bạn đã download , bạn nên kiểm tra nội dung của chúng trước khi thực thi và chạy chúng. Sử dụng lệnh less
để xem lại mã đảm bảo rằng đó là thứ bạn muốn chạy.
Kết luận
curl
cho phép bạn nhanh chóng download các file từ hệ thống từ xa. curl
hỗ trợ nhiều giao thức khác nhau và cũng có thể thực hiện các yêu cầu web phức tạp hơn, bao gồm cả việc tương tác với các API từ xa để gửi và nhận dữ liệu.
Bạn có thể tìm hiểu thêm bằng cách xem trang hướng dẫn curl
bằng cách curl
running man curl
.
Các tin liên quan