Công cụ dòng lệnh curl
là một trong những chương trình hữu ích và linh hoạt nhất mà bạn có thể học. Với khả năng đa dạng và việc triển khai HTTP toàn diện, curl
có thể thực hiện mọi tác vụ liên quan đến một URL. Dù bạn là nhà phát triển, quản trị viên hệ thống, hay chỉ đơn giản là một người dùng muốn khám phá sâu hơn về mạng và các dịch vụ web, việc nắm vững curl
sẽ mở ra một thế giới các khả năng mới, giúp bạn tương tác với internet một cách mạnh mẽ và hiệu quả hơn từ chính terminal của mình. Bài viết này sẽ đi sâu vào 8 ứng dụng thực tế và cực kỳ hữu ích của curl
, từ những tác vụ cơ bản đến các trường hợp sử dụng nâng cao, giúp bạn khai thác tối đa sức mạnh của công cụ này.
1. Tải Nội Dung Trang Web
Ở dạng cơ bản nhất, lệnh curl
có thể tải nội dung của một URL và hiển thị chúng trực tiếp trên terminal của bạn. Đây là cách nhanh chóng để xem mã nguồn HTML của một trang web hoặc bất kỳ dữ liệu nào được trả về từ một địa chỉ cụ thể.
Ví dụ: Để xem mã nguồn của trang web info.cern.ch
, bạn chỉ cần gõ:
curl info.cern.ch
Kết quả hiển thị sẽ tùy thuộc vào kiểu nội dung (content type) của URL. Nếu bạn yêu cầu một trang web, bạn sẽ thấy mã nguồn HTML của nó.
Kết quả của lệnh curl cơ bản hiển thị mã nguồn HTML của trang web.
Bạn có thể chuyển hướng kết quả này vào một tệp để lưu trữ trang web. Điều này đặc biệt hữu ích khi bạn muốn phân tích hoặc sử dụng lại nội dung trang web sau này.
curl info.cern.ch > info.cern.ch.html
Khi bạn chuyển hướng đầu ra tiêu chuẩn, curl
sẽ tự động gửi thông tin thời gian thực hiện lệnh đến stderr
(luồng lỗi chuẩn), giúp bạn theo dõi quá trình.
Một URL có thể chứa các ký tự có ý nghĩa đặc biệt đối với shell, như “?” hoặc “#”. Để tránh các vấn đề tiềm ẩn, bạn cần đảm bảo đặt URL trong dấu nháy đơn. Nếu không chắc chắn, hãy luôn sử dụng dấu nháy đơn để bọc URL của bạn, điều này là một biện pháp an toàn và được khuyến nghị.
curl 'info.cern.ch'
Giao diện Konsole Terminal trên laptop Kubuntu Focus Ir14 Linux, minh họa môi trường dòng lệnh để chạy lệnh curl.
2. Tải Tệp Tin
Khi bạn cố gắng sử dụng curl
để tải một tệp nhị phân—như hình ảnh hoặc tài liệu Microsoft Word—bạn có thể thấy một thông báo lỗi như “Binary output can mess up your terminal” (Đầu ra nhị phân có thể làm hỏng terminal của bạn). Điều này xảy ra vì curl
mặc định sẽ in toàn bộ nội dung phản hồi nhận được ra màn hình. Trong trường hợp của một tệp nhị phân (ví dụ: hình ảnh), đây gần như chắc chắn không phải là điều bạn mong muốn.
Thông báo lỗi thường gợi ý sử dụng tùy chọn --output
, cho phép bạn chỉ định một tệp để lưu đầu ra thay vì in ra màn hình. Bạn cũng có thể dùng -o
như một viết tắt tiện lợi.
curl -o neo-the-cat.jpg https://placecats.com/neo/300/200
Lệnh này sẽ lưu tệp từ URL đã cho vào thư mục hiện tại. Tương tự như khi chuyển hướng đầu ra, vì curl
không còn in phản hồi ra màn hình, nó sẽ cung cấp nhiều chi tiết về thời gian tải xuống. Nếu bạn muốn một thanh tiến trình đơn giản hơn, hãy sử dụng tùy chọn -#
hoặc --progress-bar
:
curl --progress-bar -o neo-the-cat.jpg https://placecats.com/neo/300/200
3. Cài Đặt Phần Mềm
Đôi khi, bạn có thể bắt gặp các hướng dẫn cài đặt phần mềm yêu cầu sử dụng lệnh curl
. Ví dụ, atuin
—một công cụ thay thế cho lệnh history
—có hướng dẫn cài đặt như sau:
curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh
Nếu bạn mở URL https://setup.atuin.sh
trong trình duyệt web, bạn sẽ thấy một script shell thực hiện việc cài đặt và thiết lập. Bạn có thể tải nó về và chạy thủ công nếu muốn, nhưng dòng lệnh một dòng này là cách nhanh hơn. Lưu ý rằng đầu ra—nội dung của script này—được chuyển (piped) đến sh
, chương trình sẽ thực thi nó như một script shell.
Ví dụ sử dụng curl
trong lệnh atuin
bao gồm các tùy chọn sau:
--proto '=https'
: Đảm bảocurl
sử dụng giao thức HTTPS.--tlsv1.2
: Buộccurl
sử dụng phiên bản TLS 1.2 trở lên để tăng cường bảo mật.-L
: Tự động theo dõi các chuyển hướng (redirects).-sS
: Tắt hiển thị thanh tiến trình nhưng vẫn hiển thị thông báo lỗi (silent, show errors).-f
: Coi lỗi HTTP là lỗi lệnh. Điều này nhằm đảm bảo không có thông báo lỗi nào được chuyển tớish
, tránh một hành động có khả năng nguy hiểm.
Việc chạy một script shell tải từ internet có rủi ro vì bạn không biết chính xác nó sẽ làm gì. Bạn không chỉ cần tin tưởng nguồn gốc của script, mà còn cần đảm bảo an toàn khỏi các cuộc tấn công Man-in-the-Middle. HTTPS có thể giúp giảm thiểu rủi ro này, nhưng nếu bạn muốn cẩn thận hơn, hãy cân nhắc bỏ qua pipe
, tải tệp xuống, và kiểm tra nội dung để đảm bảo an toàn trước khi chạy.
4. Kiểm Tra Địa Chỉ IP Công Cộng Của Bạn
Một ứng dụng thực tế của curl
là cách nhanh chóng và dễ dàng để kiểm tra địa chỉ IP công cộng của bạn, nhờ vào dịch vụ tại ifconfig.co
:
curl ifconfig.co
Trang web này sẽ phản hồi với địa chỉ IP công cộng của bạn:
Kết quả từ lệnh curl đến ifconfig.co hiển thị địa chỉ IP công cộng của người dùng.
Đầu ra mặc định này là văn bản thuần túy, làm cho nó trở thành một tài nguyên tuyệt vời cho các tác vụ tự động hóa. Bạn có thể nhận thấy một kết quả rất khác nếu truy cập cùng URL này trong trình duyệt web của mình:
Trang chủ ifconfig.co hiển thị trong trình duyệt web với thông tin chi tiết về địa chỉ IP công cộng, quốc gia và khu vực của người dùng.
Điều này là do trang web hoạt động khác nhau dựa trên tác nhân người dùng (User-Agent) của bạn. Mặc định, curl
gửi một chuỗi User-Agent như “curl/8.7.1”. Nếu bạn cần đặt giá trị này thành một cái gì đó khác, ví dụ cho mục đích thử nghiệm, hãy sử dụng tùy chọn -A
hoặc --user-agent
:
curl -s --user-agent "my pretend browser" ifconfig.co | head
Bây giờ trang ifconfig.co
sẽ phản hồi với HTML, giống như khi bạn truy cập bằng trình duyệt web.
5. Hiển Thị Tiêu Đề Phản Hồi và Yêu Cầu
Đôi khi, bạn chỉ muốn lấy các tiêu đề phản hồi (response headers) từ một URL. Bạn có thể đang gỡ lỗi một vấn đề hoặc kiểm tra các tiêu đề cache để xem liệu có cần tải lại tệp hay không. Để chỉ xem các tiêu đề phản hồi, hãy sử dụng tùy chọn -I
hoặc --head
:
curl -I example.com
Lệnh curl hiển thị các tiêu đề phản hồi HTTP, bao gồm Content-Type và Last-Modified.
Lệnh này sẽ gửi một yêu cầu HEAD, nhưng không phải tất cả các máy chủ web đều hỗ trợ phương thức này. Nếu bạn gặp lỗi khi sử dụng cách này, bạn có thể yêu cầu curl
gửi một yêu cầu GET và chỉ xuất các tiêu đề:
curl -I -X GET example.com
Nếu bạn muốn xem các tiêu đề yêu cầu (request headers) mà curl
gửi đi, hãy sử dụng tùy chọn --verbose
hoặc -v
. Tùy chọn này sẽ hiển thị chi tiết toàn bộ quá trình giao tiếp giữa curl
và máy chủ, bao gồm cả các tiêu đề mà curl
gửi đi và các tiêu đề phản hồi mà nó nhận được.
Kết quả của lệnh curl với tùy chọn –verbose và -I hiển thị cả tiêu đề yêu cầu và phản hồi HTTP chi tiết.
6. Truy Cập API
Nếu bạn đang làm việc với một API, các công cụ chuyên dụng như Postman hoặc Posting sẽ rất hữu ích trong việc tự động hóa và gỡ lỗi. Tuy nhiên, curl
cũng có thể là một công cụ mạnh mẽ và tiện lợi không kém để khám phá cách thức hoạt động của một API.
Dịch vụ DummyJSON (dummyjson.com) là một điểm khởi đầu tuyệt vời. Trang web này cung cấp một API mẫu với dữ liệu giả định mà bạn có thể sử dụng để kiểm thử các ứng dụng client và chương trình của riêng mình. Bạn có thể sử dụng các endpoint khác nhau để kiểm tra chuyển hướng, thử nghiệm ủy quyền (authorization), và mô phỏng độ trễ thời gian hoặc các phản hồi ngẫu nhiên.
Thử nghiệm dịch vụ với curl
đơn giản chỉ là truyền vào endpoint thích hợp:
curl https://dummyjson.com/test
Bạn sẽ thấy một tài liệu JSON đơn giản trong phản hồi, với hai thuộc tính. Thuộc tính method
sẽ phản ánh phương thức HTTP của yêu cầu của bạn.
Sau khi đã lấy dữ liệu từ một API, bạn có thể dễ dàng xử lý nó bằng các công cụ dòng lệnh tiêu chuẩn. Ví dụ, bạn có thể xử lý dữ liệu JSON bằng công cụ jq
. Dòng lệnh sau sẽ lấy dữ liệu sản phẩm bằng curl
, sau đó chuyển nó cho jq
để trích xuất sản phẩm đầu tiên:
curl https://dummyjson.com/products | jq '.products[0]' | more
Dữ liệu định dạng JSON của một sản phẩm được lấy từ dummyjson.com bằng lệnh curl và xử lý với jq.
7. Tải Nguồn Cấp RSS
Một trong những dự án cá nhân hiện tại là một trình đọc RSS dựa trên shell. Ở cốt lõi của nó là curl
, bởi vì công cụ này rất tiện lợi và hỗ trợ mọi thao tác HTTP cấp thấp cần thiết. Ví dụ, bạn có thể tải một nguồn cấp RSS (RSS feed) và xem xét nội dung của nó bằng curl
:
curl -s https://www.w3.org/blog/feed/ | more
Dữ liệu định dạng XML thu được thông qua lệnh curl truy vấn một URL nguồn cấp RSS.
Nếu bạn đã cài đặt libxml
, bạn có thể xử lý đầu ra XML bằng công cụ xmllint
:
curl -s https://www.w3.org/blog/feed/ | xmllint --xpath '//channel/title/text()' -
Dòng lệnh này sử dụng xmllint
để đánh giá một biểu thức XPath, trích xuất dữ liệu từ XML, trong trường hợp này là tiêu đề của kênh RSS.
8. Sử Dụng curl
Trong Lập Trình
Dự án cURL
không chỉ bao gồm công cụ dòng lệnh curl
mà còn có một thư viện mang tên libcurl
, đây chính là thư viện mà bản thân curl
sử dụng. Thư viện này có tính di động cao và khả dụng trên nhiều hệ điều hành khác nhau như Linux, Windows, macOS và Android. libcurl
đi kèm với một API C, nhưng có rất nhiều “bindings” (giao diện liên kết) cho nhiều ngôn ngữ lập trình khác như C++, Python, Rust và Go.
Thư viện libcurl
phản ánh hầu hết các chức năng của công cụ dòng lệnh, đặc biệt là các tùy chọn và hành vi của chúng. Dưới đây là một ví dụ cơ bản về cách sử dụng libcurl
trong PHP:
<?php
$ch = curl_init("http://www.example.com/");
$fp = fopen("www-example-com.html", "w");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
if (curl_error($ch))
fwrite($fp, curl_error($ch));
curl_close($ch);
fclose($fp);
?>
Hàm curl_init()
khởi tạo một phiên làm việc và trả về một “handle” (điểm xử lý) mà bạn có thể sử dụng để truy cập phiên đó. Bạn có thể kiểm soát hành vi của thư viện bằng cách sử dụng các tùy chọn mà curl
hỗ trợ thông qua curl_setopt()
. Hàm curl_exec()
thực sự gửi yêu cầu, trong khi curl_error()
và curl_close()
là các hàm quản trị hữu ích để xử lý lỗi và đóng phiên làm việc.
Ví dụ này sử dụng cài đặt CURLOPT_FILE
để ghi nội dung phản hồi (response body) vào một “file handle” đã mở. Lưu ý rằng điều này tương đương với tùy chọn --output
của lệnh curl
.
Kết luận
Từ việc tải xuống các trang web và tệp tin, kiểm tra địa chỉ IP, đến tương tác với API và RSS feeds, curl
chứng tỏ mình là một công cụ không thể thiếu đối với bất kỳ ai làm việc trong lĩnh vực công nghệ. Khả năng tùy chỉnh mạnh mẽ thông qua hàng trăm tùy chọn, cùng với thư viện libcurl
cho phép tích hợp vào các ứng dụng lập trình, biến curl
thành một “con dao Thụy Sĩ” thực sự trong thế giới mạng và dòng lệnh. Việc thành thạo curl
không chỉ giúp bạn thực hiện các tác vụ hàng ngày hiệu quả hơn mà còn mở rộng tầm nhìn về cách các giao thức web hoạt động.
Hãy bắt đầu khám phá và thử nghiệm các khả năng của curl
ngay hôm nay để nâng cao kỹ năng làm việc của bạn! Bạn đã sử dụng curl
trong những tình huống nào? Hãy chia sẻ kinh nghiệm và các mẹo sử dụng curl
yêu thích của bạn trong phần bình luận bên dưới nhé!
Tài liệu tham khảo
- Trang chủ chính thức của cURL: curl.se
- DummyJSON: dummyjson.com
- W3C Blog Feed: https://www.w3.org/blog/feed/
- ifconfig.co: ifconfig.co
- Atuin: atuin.sh
- Postman: postman.com
- Posting: posting.sh
- jq: jqlang.github.io/jq/
- xmllint (trong libxml2): www.xmlsoft.org/xmllint.html