Chuyển tới nội dung chính

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.

cửa hàng
roadmaps
cheatsheet
tài liệu phỏng vấ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.

Thông tin

⚡️ 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 tin data.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ệnhMô tả
curl -I https://thanhnamnguyen.devCurl 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.devCurl 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.devSử 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.comCurl không sử dụng proxy HTTP.
curl --connect-timeout 10 -I -k https://thanhnamnguyen.devCurl 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.devCurl với hiển thị chi tiết và một tiêu đề host bổ sung.
curl -k -v https://www.google.comCurl nhận phản hồi với các tiêu đề.

⚡️ CURL POST

LệnhMô 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ệnhMô tả
curl -L -s http://ipecho.net/plain, curl -L -s http://whatismijnip.nlLấy địa chỉ IP công cộng
curl -u $username:$password http://repo.dennyzhang.com/README.txtCURL 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.zipDownload file qua FTP bằng CURL
curl -v -u admin:admin123 --upload-file package1.zip http://mysever:8081/dir/package1.zipUpload 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--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

II. Tài liệu tham khảo

Chia sẻ: