15 mẹo về cách sử dụng curl command trong Linux

Vào giữa những năm 1990, khi Internet còn ở giai đoạn đầu đời, một nhà lập trình người Thụy Điển tên là Daniel Stenberg đã bắt đầu một dự án mà sau này đã phát triển thành curl command như chúng ta biết ngày hôm nay.

Ban đầu, anh ta nhằm mục tiêu phát triển một con bot sẽ tải về tỷ giá hối đoái từ một trang web định kỳ và cung cấp đồng Kronor Thụy Điển tương đương với đô la Mỹ cho người dùng IRC.

Truyện dài ngắn, dự án đã phát triển mạnh mẽ, thêm nhiều giao thức và tính năng trong suốt quá trình - còn lại là lịch sử. Bây giờ hãy nhảy vào và học cách sử dụng curl để truyền dữ liệu và nhiều hơn nữa trên Linux!

15 ví dụ về curl command

1. Xem phiên bản curl

Tùy chọn -V hoặc --version không chỉ trả về phiên bản mà còn các giao thức được hỗ trợ và tính năng trong phiên bản hiện tại của bạn.

$ curl --version

curl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP UnixSockets 

2. Tải xuống một tệp

Nếu bạn muốn tải xuống một tệp, bạn có thể sử dụng curl với các tùy chọn -O hoặc -o. Tùy chọn đầu tiên sẽ lưu tệp trong thư mục làm việc hiện tại với cùng tên như trong vị trí từ xa, trong khi tùy chọn sau cho phép bạn chỉ định một tên tệp khác và / hoặc vị trí.

$ curl -O http://yourdomain.com/yourfile.tar.gz # Save as yourfile.tar.gz
$ curl -o newfile.tar.gz http://yourdomain.com/yourfile.tar.gz # Save as newfile.tar.gz

3. Tiếp tục tải xuống bị gián đoạn

Nếu quá trình tải xuống bị gián đoạn vì một lý do nào đó (ví dụ, sử dụng Ctrl + c), bạn có thể tiếp tục nó một cách dễ dàng. Việc sử dụng -C - (gạch C, gạch ngang) cho biết curl tiếp tục tải xuống từ vị trí nó đã bị gián đoạn.

$ curl -C - -O http://yourdomain.com/yourfile.tar.gz
Download File Using Curl Command

4. Tải xuống nhiều tệp

Với lệnh sau, bạn sẽ tải xuống info.html và about.html từ http://yoursite.com và http://mysite.com, tương ứng, trong một lần đi.

$ curl -O http://yoursite.com/info.html -O http://mysite.com/about.html 

5. Tải xuống các URL từ một tệp

Nếu bạn kết hợp curl với xargs, bạn có thể tải xuống các tệp từ một danh sách các URL trong một tệp.

$ xargs -n 1 curl -O < listurls.txt
Download Multiple Files with Curl

6. Sử dụng proxy với hoặc không xác thực

Nếu bạn đang sử dụng một máy chủ proxy lắng nghe trên cổng 8080 tại proxy.yourdomain.com, hãy làm:

$ curl -x proxy.yourdomain.com:8080 -U user:password -O http://yourdomain.com/yourfile.tar.gz

nơi bạn có thể bỏ qua -U user:password nếu máy chủ proxy của bạn không yêu cầu xác thực.

7. Truy vấn tiêu đề HTTP

Tiêu đề HTTP cho phép máy chủ web từ xa gửi thông tin bổ sung về chính nó cùng với yêu cầu thực tế. Điều này cung cấp cho khách hàng thông tin chi tiết về cách yêu cầu được xử lý.

Để truy vấn tiêu đề HTTP từ một trang web, hãy làm:

$ curl -I www.tecmint.com
Curl Query HTTP Headers

Thông tin này cũng có sẵn trong các công cụ phát triển trình duyệt của bạn.

8. Gửi yêu cầu POST với các tham số

Lệnh sau sẽ gửi các tham số firstName và lastName, cùng với các giá trị tương ứng của chúng, đến https://yourdomain.com/info.php.

$ curl --data "firstName=John&lastName=Doe" https://yourdomain.com/info.php

Bạn có thể sử dụng mẹo này để mô phỏng hành vi của một biểu mẫu HTML thông thường.

9. Tải tệp từ máy chủ FTP với hoặc không xác thực

Nếu máy chủ FTP từ xa đang chờ kết nối tại ftp://yourftpserver, lệnh sau sẽ tải về yourfile.tar.gz trong thư mục làm việc hiện tại.

$ curl -u username:password -O ftp://yourftpserver/yourfile.tar.gz 

nơi bạn có thể bỏ qua -u username:password nếu máy chủ FTP cho phép đăng nhập ẩn danh.

10. Tải lên tệp lên máy chủ FTP với hoặc không xác thực

Để tải lên một tệp cục bộ có tên mylocalfile.tar.gz lên ftp://yourftpserver bằng curl, hãy làm:

$ curl -u username:password -T mylocalfile.tar.gz ftp://yourftpserver

11. Chỉ định User Agent

User agent là một phần của thông tin được gửi cùng yêu cầu HTTP. Điều này cho biết trình duyệt mà khách hàng đã sử dụng để thực hiện yêu cầu. Hãy xem xét xem phiên bản curl hiện tại của chúng ta sử dụng gì theo mặc định, sau đó sau đó hãy thay đổi thành "Tôi là một trình duyệt web mới":

$ curl -I http://localhost --user-agent "I am a new web browser"
Curl Check User Agent

12. Lưu Cookies của trang web

Bạn muốn xem các cookie được tải xuống máy tính của bạn khi bạn duyệt đến https://www.cnn.com? Sử dụng lệnh sau để lưu chúng vào cnncookies.txt. Sau đó, bạn có thể sử dụng lệnh cat để xem tệp.

$ curl --cookie-jar cnncookies.txt https://www.cnn.com/index.html -O
Curl Store Website Cookies

13. Gửi Cookies của trang web

Bạn có thể sử dụng các cookie được lấy ra trong mẹo trước đó trong các yêu cầu sau đến cùng một trang web.

$ curl --cookie cnncookies.txt https://www.cnn.com

14. Sửa đổi việc giải quyết tên

Nếu bạn là một nhà phát triển web và muốn kiểm tra phiên bản cục bộ của yourdomain.com trước khi đưa ra, bạn có thể làm cho curl giải quyết http://www.yourdomain.com thành localhost như sau:

$ curl --resolve www.yourdomain.com:80:localhost http://www.yourdomain.com/

Do đó, truy vấn đến http://www.yourdomain.com sẽ yêu cầu curl yêu cầu trang từ localhost thay vì sử dụng DNS hoặc tệp /etc/hosts.

15. Giới hạn tỷ lệ tải xuống

Để curl không gây phiền toái băng thông của bạn, bạn có thể giới hạn tốc độ tải xuống 100 KB/s như sau.

$ curl --limit-rate 100K http://yourdomain.com/yourfile.tar.gz -O

Kết luận

Trong bài viết này, chúng tôi đã chia sẻ một lịch sử ngắn về nguồn gốc của curl command và giải thích cách sử dụng nó thông qua 15 ví dụ thực tế.

Cuối cùng, với những mẹo được chia sẻ về cách sử dụng curl command trong Linux, bạn sẽ trở thành một chuyên gia về việc tương tác với các dịch vụ web từ dòng lệnh. Tận dụng khả năng mạnh mẽ của curl command sẽ giúp bạn thực hiện các tác vụ mạng một cách hiệu quả và linh hoạt hơn bao giờ hết. Hãy thử áp dụng những mẹo này trong các dự án của bạn và khám phá ra thêm nhiều khả năng mới mà curl command mang lại.