Lệnh curl trong Linux là một công cụ command-line dùng để chuyển dữ liệu giữa các server mà không cần tương tác của người dùng. Curl hỗ trợ nhiều giao thức tiêu chuẩn hiện nay như HTTP, HTTPS, SCP, SFTP và FTP. Bài viết này sẽ hướng dẫn các trường hợp sử dụng lệnh curl cơ bản nhất.
Cài đặt curl trong Linux
Lệnh curl cung cấp nhiều option để truyền dữ liệu, giới hạn băng thông, hỗ trợ proxy, xác thực người dùng,… Lệnh này được cài đặt sẵn trên hầu hết các bản phân phối Linux hiện nay.
Để kiểm tra xem package curl đã được cài đặt chưa, chỉ cần mở console rồi nhập curl. Nếu curl đã được cài đặt thì màn hình sẽ hiển thị curl: try 'curl --help' or 'curl --manual' for more information
. Ngược lại, thông báo curl command not found
cho biết rằng lệnh chưa được cài đặt.
- Cài đặt trên Ubuntu và Debian
sudo apt update
sudo apt install curl
- Cài đặt Curl trên CentOS và Fedora
sudo yum install curl
Cách sử dụng lệnh curl trong Linux
Lệnh curl có cú pháp chung như sau:
curl [options] [URL...]
Nếu gọi lệnh mà không truyền thêm option nào thì lệnh curl sẽ hiển thị tài nguyên được chỉ định ở định dạng output tiêu chuẩn. Ví dụ bạn cần truy xuất trang chủ example.com:
curl example.com
Khi đó lệnh sẽ in mã nguồn của trang example.com lên cửa sổ terminal. Nếu không chỉ định giao thức nào thì curl sẽ sử dụng HTTP làm mặc định.
Lưu output vào một file
Để lưu lại kết quả của lệnh curl, bạn có thể truyền option -o hoặc -0 vào lệnh. Trong đó, -o dùng để lưu file với một tên file cho sẵn. Ví dụ bạn muốn lưu vào file có tên vue-v2.6.10.js:
curl -o vue-v2.6.10.js https://cdn.jsdelivr.net/npm/vue/dist/vue.js
Còn option -0 sẽ lưu file với tên file gốc:
curl -O https://cdn.jsdelivr.net/npm/vue/dist/vue.js
Download nhiều file cùng lúc bằng curl
Nếu muốn download nhiều file cùng lúc, bạn có thể dùng option -0 kèm theo URL của file cần download. Ở đoạn code dưới đây, bạn sẽ dùng curl để download file iso của Arch Linux và Debian:
curl -O https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-9.4.0-amd64-netinst.iso
Tiếp tục quá trình download
Bạn có thể tiếp tục quá trình download bằng option -C -. Đây là một công cụ hữu ích nếu cần download các file lớn mà kết nối mạng lại không ổn định.
Ví dụ bạn cần download file iso của Ubuntu 18.04 bằng lệnh curl:
curl -O http://releases.ubuntu.com/18.04/ubuntu-18.04-live-server-amd64.iso
Nếu chẳng may kết nối bị ngắt quãng thì bạn có thể dùng lệnh sau để tiếp tục quá trình download thay vì phải tải lại từ đầu:
curl -C - -O http://releases.ubuntu.com/18.04/ubuntu-18.04-live-server-amd64.iso
Lấy HTTP Header của URL
Các HTTP header là những cặp key-value được phân tách nhau bằng dấu hai chấm, chứa các thông tin như user agent, loại nội dung và mã hóa (encoding). Các header được truyền giữa client và server với request hoặc response. Bạn có thể dùng option -I để nạp các HTTP header của một tài nguyên như sau:
curl -I --http2 https://www.ubuntu.com/
Kiểm tra xem website có hỗ trợ HTTP/2 không
Lệnh curl trong Linux còn cho phép bạn kiểm tra xem một URL có hỗ trợ giao thức HTTP/2 hay không bằng cách nạp HTTP header với các option -I và --http2:
curl -I --http2 -s https://linuxize.com/ | grep HTTP
Trong đó, option -s yêu cầu curl chạy trong chế độ im lặng, ẩn thanh tiến độ và các thông báo lỗi:
Nếu server remote có hỗ trợ HTTP/2 thì lệnh curl sẽ trả về kết quả sau:
HTTP/2 200
Ngược lại, nếu không hỗ trợ thì bạn sẽ nhận được phản hồi là:
HTTP/1.1 200 OK
Đối với curl phiên bản 7.47.0 trở đi thì bạn không cần dùng option --http2 nữa vì HTTP/2 được bật theo mặc định cho mọi kết nối HTTPS.
Theo dõi các redirect
Theo mặc định thì curl không theo dõi các header HTTP Location. Nếu truy xuất bản không www (non-www) của google.com, bạn sẽ được tự động điều hướng đến phiên bản www:
curl google.com
Lệnh curl cho phép sử dụng option -L để yêu cầu Curl theo dõi bất kỳ điều hướng nào cho tới khi đến được đích:
curl -L google.com
Thay đổi user-agent
Khi download một file, đôi khi remote server có thể block Curl User-Agent hoặc trả về nội dung khác tùy theo từng thiết bị và trình duyệt. Khi đó, bạn có thể giả lập một trình duyệt khác bằng -A để tránh gặp lỗi. Ví dụ khi cần giả lập Firefox 60:
curl -A "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0" https://getfedora.org/
Chỉ định tốc độ truyền tối đa
Option --limit-rate cho phép giới hạn tốc độ truyền tải dữ liệu. Giá trị có thể được biểu diễn bằng đơn vị byte, kilobyte (sử dụng hậu tố k), megabyte (hậu tố là m) hoặc gigabyte với hậu tố là g. Ở ví dụ dưới đây, bạn sẽ dùng curl để download Go binary, đồng thời giới hạn tốc độ download xuống còn 1mb:
curl --limit-rate 1m -O https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz
Option này cho phép ngăn không cho curl tiêu tốn toàn bộ băng thông.
Truyền file thông qua FTP
Để truy cập một server FTP được bảo vệ thông qua curl, bạn có thể dùng option -u và chỉ định username/password như sau:
curl -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/
Sau khi đăng nhập, lệnh sẽ liệt kê mọi file và thư mục trong home directory của người dùng. Bạn cũng có thể download một file duy nhất từ server FTP bằng cú pháp sau:
curl -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/file.tar.gz
Để upload một file lên server FTP, bạn có thể dùng option -T kèm theo tên của file muốn upload:
curl -T newfile.tar.gz -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/
Gửi cookies
Đôi khi, bạn có thể cần tạo một HTTP request với cookies xác định để truy cập tài nguyên ở xa. Theo mặc định thì cookies không được gửi hay lưu trữ khi bạn yêu cầu tài nguyên qua lệnh curl. Để gửi cookies đến server thì bạn có thể dùng option -b kèm theo tên file chứa cookies.
Ví dụ, để download file rpm của Oracle Java JDK jdk-10.0.2_linux-x64_bin.rpm, bạn cần truyền cookie có tên oraclelicense với giá trị a:
curl -L -b "oraclelicense=a" -O http://download.oracle.com/otn-pub/java/jdk/10.0.2+13/19aef61b38124481863b1413dce1855f/jdk-10.0.2_linux-x64_bin.rpm
Sử dụng proxies
curl hỗ trợ nhiều kiểu proxy khác nhau, trong đó có cả HTTP, HTTPS và SOCKS. Để truyền dữ liệu qua một server proxy, bạn có thể dùng option -x (--proxy) kèm theo URL của proxy. Ví dụ, lệnh sau dùng để download tài nguyên được chỉ định bằng một proxy trên 192.168.44.1, cổng 8888:
curl -x 192.168.44.1:8888 http://linux.com/
Nếu server proxy yêu cầu xác thực thì bạn có thể dùng option -U (--proxy-user) kèm theo username/password, phân tách nhau bởi dấu hai chấm:
curl -U username:password -x 192.168.44.1:8888 http://linux.com/
Ngoài ra, bạn có thể tham khảo thêm một số lệnh trong Linux qua các bài viết sau:
Lời kết
Curl là một công cụ command-line mạnh mẽ và đa năng. Bên cạnh mục đích truyền dữ liệu đến các host từ xa, lệnh curl trong Linux còn có thể dùng để sửa lỗi, download file,… Hy vọng bài viết giúp bạn hiểu hơn về cách sử dụng lệnh Curl trong Linux. Nếu có bất kỳ thắc mắc nào hãy để lại bình luận ngay bên dưới, Vietnix sẽ giải đáp nhanh nhất!