Thứ sáu, 28/08/2020 | 00:00 GMT+7

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:

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

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:

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

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:

Output
User-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 .


Tags:

Các tin liên quan