Client URL, hay cURL, là một thư viện và tiện ích dòng lệnh dùng để chuyển dữ liệu giữa các hệ thống. Nó hỗ trợ nhiều giao thức và thường được cài đặt mặc định trên nhiều hệ điều hành kiểu Unix. Nhờ tính phổ biến này, cURL
là lựa chọn tuyệt vời khi bạn cần tải một tệp tin về hệ thống cục bộ, đặc biệt trong môi trường máy chủ.
Trong bài hướng dẫn này, bạn sẽ sử dụng lệnh curl
để tải một tệp văn bản từ máy chủ web. Bạn sẽ xem nội dung của nó, lưu trữ cục bộ và chỉ định cho curl
theo dõi các chuyển hướng nếu tệp tin đã được di chuyển.
Tải tệp tin từ Internet có thể khá nguy hiểm, vì vậy hãy đảm bảo rằng bạn chỉ tải về từ các nguồn uy tín. Trong bài hướng dẫn này, bạn sẽ tải tệp từ DataOnline, và bạn sẽ không thực thi bất kỳ tệp nào tải về.
Bước 1 – Lấy tệp tin từ xa
Mặc định, nếu không truyền thêm bất kỳ tham số dòng lệnh nào, lệnh curl sẽ lấy tệp tin và hiển thị nội dung của nó ra đầu ra tiêu chuẩn.
Hãy thử bằng cách tải tệp robots.txt từ DataOnline.vn:
curl https://dataonline.vn/robots.txt
Bạn sẽ thấy nội dung của tệp được hiển thị trên màn hình:
Output User-agent: * Disallow: /wp-admin/ Allow: /wp-admin/admin-ajax.php Sitemap: https://dataonline.vn/sitemap_index.xml
Khi bạn cung cấp cho curl một URL, nó sẽ lấy tài nguyên đó và hiển thị nội dung của nó.
Lưu trữ tệp từ xa
Lấy tệp tin và hiển thị nội dung có vẻ ổn, nhưng nếu bạn muốn lưu tệp tin vào hệ thống của mình thì sao?
Để lưu tệp tin từ xa về hệ thống cục bộ, với tên tệp giống như trên máy chủ mà bạn đang tải, hãy thêm tham số –-remote-name
hoặc dùng tùy chọn -O
:
curl -O https://dataonline.vn/robots.txt
Tệp của bạn sẽ được tải về:
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ì chỉ hiển thị nội dung của tệp, curl sẽ hiển thị thanh tiến trình dạng văn bản và lưu tệp với tên giống như trên máy chủ. Bạn có thể kiểm tra bằng lệnh cat:
cat robots.txt
Tệp tin chứa nội dung giống như bạn đã thấy trước đó:
Output User-agent: * Disallow: sitemap: https://dataonline.vn/sitemap.xml sitemap: https://dataonline.vn/community/main_sitemap.xml.gz sitemap: https://dataonline.vn/community/questions_sitemap.xml.gz sitemap: https://dataonline.vn/community/users_sitemap.xml.gz
Bây giờ, hãy cùng xem cách chỉ định tên tệp cụ thể cho tệp tải về.
Bước 2 – Lưu tệp tin từ xa với tên tệp cụ thể
Có thể bạn đã có một tệp tin cục bộ có cùng tên với tệp trên máy chủ từ xa.
Để tránh ghi đè lên tệp cục bộ có cùng tên, hãy sử dụng tham số -o
hoặc --output
, sau đó là tên tệp cục bộ mà bạn muốn lưu nội dung vào.
Thực hiện lệnh sau để tải tệp robots.txt
từ xa và lưu với tên do-bots.txt
trên máy cục bộ:
curl -o do-bots.txt https://dataonline.vn/robots.txt
Một lần nữa, 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ờ, dùng lệnh cat
để hiển thị nội dung của do-bots.txt
nhằm xác nhận đó chính là tệp bạn đã tải về:
cat do-bots.txt
Nội dung hiển thị giống như sau:
Output User-agent: * Disallow: sitemap: https://dataonline.vn/sitemap.xml sitemap: https://dataonline.vn/community/main_sitemap.xml.gz sitemap: https://dataonline.vn/community/questions_sitemap.xml.gz sitemap: https://dataonline.vn/community/users_sitemap.xml.gz
Bước 3 – Theo dõi các chuyển hướng
Mặc định, curl không theo dõi chuyển hướng, vì vậy khi tệp tin được di chuyển, bạn có thể không nhận được kết quả như mong đợi. Hãy cùng xem cách khắc phục.
Cho đến nay, tất cả các ví dụ đều bao gồm URL đầy đủ có chứa giao thức https://
. Nếu bạn cố gắng lấy tệp robots.txt
chỉ bằng cách chỉ định, bạn sẽ không thấy bất kỳ đầu ra nào, vì DataOnline sẽ chuyển hướng các yêu cầu từ http://
sang https://
:
Bạn có thể kiểm tra điều này bằng cách sử dụng tham số -I
, tham số này sẽ hiển thị tiêu đề của yêu cầu thay vì nội dung của tệp:
curl -I dataonline.vn/robots.txt
Kết quả đầu ra cho thấy URL đã được chuyển hướng. Dòng đầu tiên của kết quả cho biết tệp đã được di chuyển, và dòng Location cho biết nơi chuyển hướng đến:
Output HTTP/1.1 301 Moved Permanently Cache-Control: max-age=3600 Cf-Ray: 65dd51678fd93ff7-YYZ Cf-Request-Id: 0a9e3134b500003ff72b9d0000000001 Connection: keep-alive Date: Fri, 11 Jun 2021 19:41:37 GMT Expires: Fri, 11 Jun 2021 20:41:37 GMT Location: https://dataonline.vn/robots.txt Server: cloudflare . . .
Bạn có thể sử dụng curl để thực hiện một yêu cầu khác thủ công, hoặc bạn có thể dùng tham số --location
hoặc -L
cho curl, tham số này sẽ yêu cầu curl tự động thực hiện lại yêu cầu tới địa chỉ mới mỗi khi gặp chuyển hướng. Hãy thử:
curl -L dataonline.vn/robots.txt
Lần này, bạn sẽ thấy nội dung được hiển thị vì curl đã theo dõi chuyển hướng:
Output User-agent: * Disallow: sitemap: https://dataonline.vn/sitemap.xml sitemap: https://dataonline.vn/community/main_sitemap.xml.gz sitemap: https://dataonline.vn/community/questions_sitemap.xml.gz sitemap: https://dataonline.vn/community/users_sitemap.xml.gz
Bạn cũng có thể kết hợp tham số -L
với một số tham số đã nói ở trên để tải tệp về hệ thống cục bộ:
curl -L -o do-bots.txt dataonline.vn/robots.txt
Cảnh báo: Rất nhiều tài nguyên trên mạng sẽ yêu cầu bạn dùng
curl
để tải các script và thực thi chúng. Trước khi chạy bất kỳ script nào bạn tải về, hãy kiểm tra nội dung của chúng bằng lệnhless
để đảm bảo rằng đó là những đoạn mã bạn muốn thực thi.