Curl - Cheatsheet
Tổng hợp cheatsheet Curl về các lệnh và ví dụ một số thủ thuật Curl phổ biến.
🔖 Gợi ý từ Admin
📝 Tài liệu phỏng vấn kiến thức lập trình: Xem tại đây!!!
📌 Tìm hiểu về thuật toán: Xem tại đây!!!
📌 Roadmaps - Lộ trình trở thành một lập trình viên: Xem tại đây!!!
⚡️ Cheatsheet các ngôn ngữ lập trình: Xem tại đây!!!
⚡️ Handbook lập trình: Xem tại đây!!!
I. Tổng hợp Curl Cheatsheet
1. Cơ bản
Curl là một công cụ để chuyển dữ liệu giữa các máy chủ, hỗ trợ các giao thức bao gồm:
HTTP HTTPS FTP
IMAP LDAP POP3
SCP SFTP SMB
SMTP ...
Curl được sử dụng để thực hiện các yêu cầu và truyền dữ liệu thông qua các giao thức khác nhau như HTTP, HTTPS, FTP, và nhiều giao thức khác.
Tham khảo thêm tại
⚡️ Tuỳ chọn (Options)
-o <file> # --output: Ghi vào tệp
-u user:pass # --user: Xác thực
-v # --verbose: Hiển thị chi tiết khi thực hiện curl
-vv # Chi tiết hơn
-s # --silent: Không hiển thị thanh tiến trình hoặc lỗi
-S # --show-error: Khi sử dụng với --silent (-sS), hiển thị lỗi nhưng không có thanh tiến trình
-i # --include: Bao gồm tiêu đề HTTP trong đầu ra
-I # --head: Chỉ lấy tiêu đề
⚡️ Request (Yêu cầu): Trong cú pháp này, chúng ta đang định nghĩa các tùy chọn liên quan đến việc gửi yêu cầu HTTP.
-X POST
: Sử dụng phương thức POST cho yêu cầu. Điều này thông báo rằng dữ liệu yêu cầu sẽ được gửi theo cách POST.-L
: Nếu trang web chuyển hướng, theo dõi liên kết chuyển hướng. Điều này giúp curl tự động xử lý các trang web chuyển hướng và gửi yêu cầu đến địa chỉ mới.-F
: Sử dụng để gửi dữ liệu HTTP POST dưới định dạng multipart/form-data. Điều này thường được sử dụng khi tải lên các tệp tin hay truyền các dữ liệu được mã hóa dưới dạng biểu mẫu.
Ví dụ:
curl -X POST -L -F "key1=value1" -F "key2=value2" https://example.com
Trong ví dụ trên, curl sẽ gửi một yêu cầu POST đến https://example.com
, và dữ liệu sẽ được gửi dưới dạng multipart/form-data với các cặp khóa-giá trị được chỉ định.
⚡️ Data (Dữ liệu): Tùy chọn này liên quan đến việc xác định dữ liệu được gửi trong yêu cầu HTTP.
-d 'data'
: Sử dụng để gửi dữ liệu HTTP POST dưới dạng x-www-form-urlencoded. Ví dụ:-d 'key1=value1&key2=value2'
. Cú pháp này sử dụng định dạng mã hóa URL để truyền dữ liệu.-d @file
: Cho phép đọc dữ liệu từ tệp tin và gửi nó trong yêu cầu. Ví dụ:-d @data.txt
. Dữ liệu từ tệp tindata.txt
sẽ được đọc và gửi trong yêu cầu.-G
: Sử dụng cùng với-d
để gửi dữ liệu HTTP POST dưới dạng x-www-form-urlencoded, nhưng trong một yêu cầu GET thay vì POST. Điều này chuyển đổi yêu cầu thành một yêu cầu GET với dữ liệu được thêm vào URL.
Trong ví dụ này, curl sẽ gửi một yêu cầu POST đến https://example.com/resource
với dữ liệu được xác định.
curl -d 'key1=value1&key2=value2' https://example.com/resource
⚡️ Thông tin Header (Headers): Cấu hình các thông tin Header trong yêu cầu HTTP.
-A <str>
: Hoặc--user-agent
, đặt User-Agent string cho yêu cầu. Điều này giúp định danh loại trình duyệt hoặc ứng dụng gửi yêu cầu.-b name=val
: Hoặc--cookie
, đặt cookie trong yêu cầu. Bạn có thể truyền giá trị cookie trực tiếp, ví dụ:-b "cookieName=cookieValue"
, hoặc đọc từ một tệp tin:-b cookies.txt
.-H "X-Foo: y"
: Hoặc--header
, thêm một dòng Header vào yêu cầu. Trong ví dụ, một Header tên "X-Foo" với giá trị "y" được thêm vào yêu cầu.--compressed
: Sử dụng để bật việc nén dữ liệu sử dụng gzip hoặc deflate trong yêu cầu. Nếu máy chủ hỗ trợ, dữ liệu được gửi và nhận sẽ được nén.
Trong ví dụ này, curl sẽ gửi yêu cầu với User-Agent là "Mozilla/5.0", cookie "user=John", và một Header tùy chỉnh "X-Api-Key" với giá trị "secret".
curl -A "Mozilla/5.0" -b "user=John" -H "X-Api-Key: secret" https://example.com/resource
⚡️ SSL (Secure Sockets Layer): Cấu hình liên quan đến SSL khi sử dụng Curl.
--cacert <file>
: Xác định một tệp tin chứa danh sách các chứng chỉ CA đáng tin cậy để xác minh chứng chỉ máy chủ.--capath <dir>
: Đường dẫn đến một thư mục chứa các tệp tin chứng chỉ CA.-E
hoặc--cert <cert>
: Chỉ định đường dẫn đến tệp tin chứng chỉ của máy khách.--cert-type
: Xác định kiểu chứng chỉ (der/pem/eng).-k
hoặc--insecure
: Bỏ qua các lỗi chứng chỉ SSL. Thường được sử dụng khi làm việc với các chứng chỉ tự ký.apk add --update curl
: Là câu lệnh để cài đặt Curl trong Alpine Linux.
Trong ví dụ này, curl sử dụng tệp tin /path/to/ca.crt
để xác minh chứng chỉ CA và tệp tin /path/to/client.pem
làm chứng chỉ của máy khách. Ngoài ra, -k
được sử dụng để bỏ qua các lỗi chứng chỉ SSL.
curl --cacert /path/to/ca.crt --cert /path/to/client.pem https://example.com
2. Example
⚡️ Cách lệnh sử dụng Curl GET/HEAD
Lệnh | Mô tả |
---|---|
curl -I https://thanhnamnguyen.dev | Curl gửi một yêu cầu và hiển thị chỉ phần đầu phản hồi. |
curl -v -I https://thanhnamnguyen.dev | Curl yêu cầu với thông tin chi tiết và hiển thị phần đầu phản hồi. |
curl -X GET https://thanhnamnguyen.dev | Sử dụng phương thức HTTP GET một cách rõ ràng với Curl. |
curl --noproxy 127.0.0.1 http://www.stackoverflow.com | Curl không sử dụng proxy HTTP. |
curl --connect-timeout 10 -I -k https://thanhnamnguyen.dev | Curl với thời gian chờ kết nối tối đa là 10 giây và hiển thị phần đầu phản hồi. |
curl --verbose --header "Host: www.mytest.com:8182" thanhnamnguyen.dev | Curl với hiển thị chi tiết và một tiêu đề host bổ sung. |
curl -k -v https://www.google.com | Curl nhận phản hồi với các tiêu đề. |
⚡️ CURL POST
Lệnh | Mô tả |
---|---|
curl -d "name=username&password=123456" <URL> | Curl gửi yêu cầu với dữ liệu form-urlencoded. |
curl <URL> -H "content-type: application/json" -d "{ \"woof\": \"bark\"}" | Curl gửi yêu cầu với dữ liệu JSON. |
⚡️ Multiple File Upload: Sử dụng Curl để tải lên nhiều tập tin
Curl được sử dụng để thực hiện một yêu cầu đa tập tin. Các tập tin được đính kèm bằng cách sử dụng tùy chọn --form
, trong đó key1=value1
là dữ liệu form và upload=@localfilename
là cú pháp để đính kèm tập tin localfilename
vào yêu cầu.
$ curl -v --include \
--form key1=value1 \
--form upload=@localfilename URL
⚡️ Định dạng đẹp cho output JSON từ Curl Response
Curl được sử dụng để thực hiện một yêu cầu GET đến URL http://${elasticsearch_ip}:9200/_cluster/nodes
, và kết quả JSON được định dạng đẹp bằng cách sử dụng python -m json.tool
. Điều này giúp hiển thị nội dung JSON một cách rõ ràng và dễ đọc hơn.
$ curl -XGET http://${elasticsearch_ip}:9200/_cluster/nodes | python -m json.tool
⚡️ CURL Script cài đặt RVM
Lệnh curl được sử dụng để tải và chạy script cài đặt RVM (Ruby Version Manager). Tùy chọn -sSL
bao gồm các lựa chọn để tắt đầu ra verbose, hỗ trợ truy cập qua HTTPS và tiếp tục chạy các tác vụ mà không có thông tin đầu ra trung gian. Sau đó, script cài đặt RVM được chạy bằng lệnh bash
.
curl -sSL https://get.rvm.io | bash
⚡️ CURL nâng cao
Lệnh | Mô tả |
---|---|
curl -L -s http://ipecho.net/plain, curl -L -s http://whatismijnip.nl | Lấy địa chỉ IP công cộng |
curl -u $username:$password http://repo.dennyzhang.com/README.txt | CURL với thông tin đăng nhập |
curl -v -F key1=value1 -F upload=@localfilename <URL> | Upload file bằng CURL |
curl -k -v --http2 https://www.google.com/ | Sử dụng http2 với CURL |
curl -T cryptopp552.zip -u test:test ftp://10.32.99.187/ | Upload file qua FTP bằng CURL |
curl -u test:test ftp://10.32.99.187/cryptopp552.zip -o cryptopp552.zip | Download file qua FTP bằng CURL |
curl -v -u admin:admin123 --upload-file package1.zip http://mysever:8081/dir/package1.zip | Upload với thông tin đăng nhập CURL |
⚡️ Kiểm tra thời gian phản hồi của trang web (Check website response time)
Đây là một ví dụ về cách sử dụng tùy chọn -w
để định dạng và hiển thị thời gian phản hồi từ server khi thực hiện một yêu cầu CURL.
curl -s -w \
'\nThời gian tìm kiếm DNS:\t%{time_namelookup}\nThời gian kết nối:\t%{time_connect}\nThời gian kết nối ứng dụng:\t%{time_appconnect}\nThời gian chuyển hướng:\t%{time_redirect}\nThời gian trước chuyển dữ liệu:\t%{time_pretransfer}\nThời gian bắt đầu chuyển dữ liệu:\t%{time_starttransfer}\n\nTổng thời gian:\t%{time_total}\n' \
-o /dev/null https://www.google.com
⚡️ Sử dụng Curl để kiểm tra xem tài nguyên từ xa có sẵn không (Use Curl to check if a remote resource is available)
Lệnh này sử dụng tùy chọn -o /dev/null
để không lưu dữ liệu về bất kỳ đâu và --silent
để tắt các thông báo không cần thiết. Tùy chọn -I
chỉ lấy phần tiêu đề HTTP và -w "%{http_code}"
được sử dụng để hiển thị mã trạng thái HTTP của yêu cầu.
curl -o /dev/null --silent -Iw "%{http_code}" https://example.com/my.remote.tarball.gz
⚡️ Tải file: Tải tất cả các file PNG từ trang web (sử dụng GNU grep).
Lệnh này sử dụng curl
để lấy nội dung của trang web, sau đó sử dụng grep
để tìm các URL của các file PNG. Cuối cùng, sử dụng một vòng lặp để tải xuống từng file PNG và lưu chúng với tên tương ứng.
curl https://example.com | \
grep --only-matching 'src="[^"]*.[png]"' | \
cut -d \" -f2 | \
while read i; do curl https://example.com/"${i}" \
-o "${i##*/}"; done
⚡️ Tiếp tục tải file đã bắt đầu (continue partial download): Lệnh này sử dụng curl
để tiếp tục tải file đã bắt đầu từ nơi đã được tải trước đó. Tùy chọn --remote-name
giúp giữ nguyên tên của file trên máy đích.
curl --remote-name --continue-at - "https://example.com/linux-distro.iso"
⚡️ Tải xuống một loạt các file: Lệnh này sử dụng cú pháp {}
để chỉ định các giá trị thay thế và [1-4]
để chỉ định một loạt các số từ 1 đến 4. Tùy chọn --output
xác định định dạng đặt tên cho các file đã tải xuống.
curl "https://{foo,bar}.com/file_[1-4].webp" --output "#1_#2.webp"
⚡️ Tải xuống file và lưu file mà không thay đổi tên: Lệnh này sử dụng tùy chọn --remote-name
để lưu file với cùng tên mà nó có trên máy chủ mà không cần phải đặt tên mới.
curl --remote-name "https://example.com/linux-distro.iso"
⚡️ Đổi tên file: Lệnh này tải file từ URL và lưu trữ nó với tên foo.html
thay vì tên mặc định trên máy chủ.
curl --remote-name "http://example.com/index.html" --output foo.html
⚡️ Tải về các file từ nhiều domain: Lệnh này tải về các file index.html
từ ba domain khác nhau (example.org
, w3.org
, và iana.org
) và lưu trữ chúng với tên tương ứng là file_example.html
, file_w3.html
, và file_iana.html
.
curl "https://www.{example,w3,iana}.org/index.html" --output "file_#1.html"
⚡️ Chuyển hướng đầu ra vào file: Lệnh này tải nội dung từ URL và lưu trữ nó vào tệp file
.
$ curl http://url/file > file
⚡️ Xác thực cơ bản (Basic Authentication): Lệnh này sử dụng xác thực cơ bản khi truy cập vào URL, yêu cầu tên người dùng và mật khẩu.
$ curl --user username:password http://example.com/
$ curl -u username:password http://example.com/
⚡️ Ghi vào tệp thay vì stdout: Lệnh này tải nội dung từ URL và lưu vào tệp có tên là "file".
$ curl -o file http://url/file
$ curl --output file http://url/file
⚡️ Tải thông tin tiêu đề (Download header information): Lệnh này sử dụng cURL để tải thông tin tiêu đề của tài nguyên từ URL được chỉ định.
$ curl -I url # hiển thị thông tin tiêu đề
⚡️ Ghi đầu ra vào tệp có tên là remote_file: Lệnh này sử dụng cURL để tải dữ liệu từ URL và ghi nó vào tệp có tên là file
. Cả hai cú pháp -o
và --output
đều có chức năng tương tự trong việc xác định tên tệp đầu ra.
$ curl -o file http://url/file
$ curl --output file http://url/file
⚡️ Thực thi tập lệnh từ xa: Lệnh này sử dụng cURL để tải và thực thi một tập lệnh từ xa từ URL. Tùy thuộc vào nội dung của myscript.sh
, nó có thể thực hiện các công việc khác nhau mà tác giả của myscript.sh
đã định nghĩa. Lưu ý rằng việc thực thi tập lệnh từ xa có thể mang theo rủi ro nếu bạn không tin tưởng nguồn gốc của script.
$ curl -s http://url/myscript.sh
⚡️ Tập tin cấu hình (Configuration file): Lệnh curl -K file
hoặc curl --config file
sử dụng một tập tin cấu hình để cung cấp các tùy chọn và cài đặt cụ thể. Nếu không có tùy chọn nào được cung cấp trực tiếp trong lệnh, cURL sẽ tìm kiếm các cài đặt trong tập tin cấu hình. Tập tin cấu hình mặc định thường là $HOME/.curlrc
trên các hệ thống giống UNIX.
curl -K file
# Đọc cấu hình từ tập tin
curl --config file
$HOME/.curlrc # Tập tin cấu hình mặc định trên hệ thống giống UNIX