Trong thế giới công nghệ hiện đại, công cụ dòng lệnh curl
đã trở thành một trong những tiện ích mạnh mẽ và linh hoạt nhất mà bất kỳ ai làm việc với mạng và web đều nên nắm vững. Với khả năng xử lý HTTP toàn diện và tính đa năng vượt trội, curl
có thể thực hiện hầu hết mọi tác vụ liên quan đến URL. Từ việc tải xuống trang web, file, đến tương tác với API và thậm chí là hỗ trợ cài đặt phần mềm, curl
mở ra một cánh cửa rộng lớn cho các nhà phát triển, quản trị viên hệ thống và những người dùng muốn tự động hóa các tác vụ trực tuyến.
Bài viết này trên tinmoicongnghe.com sẽ cung cấp một cái nhìn sâu sắc và toàn diện về cách sử dụng curl
, từ những lệnh cơ bản nhất đến các tùy chọn nâng cao, giúp bạn khai thác tối đa tiềm năng của công cụ này. Chúng ta sẽ cùng nhau đi qua 8 trường hợp sử dụng phổ biến và thiết yếu của curl
, kèm theo các ví dụ minh họa chi tiết, đảm bảo rằng bạn có thể áp dụng ngay lập tức vào công việc và dự án của mình. Hãy cùng khám phá tại sao curl
lại được coi là “con dao đa năng” trong hộp công cụ của mọi chuyên gia công nghệ!
8. Tải Trang Web với Lệnh curl
: Hướng Dẫn Chi Tiết
Ở dạng cơ bản nhất, lệnh curl
sẽ tải một URL và hiển thị nội dung của nó 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ỉ URL.
Ví dụ, để xem nội dung của trang web info.cern.ch
, bạn chỉ cần gõ:
curl info.cern.ch
Những gì bạn thấy sẽ phụ thuộc vào loại nội dung 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ó được in ra.
curl lấy mã nguồn HTML của trang web CERN
Bạn có thể chuyển hướng đầu ra này sang 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 xử lý nội dung trang web sau này mà không cần truy cập lại.
curl info.cern.ch > info.cern.ch.html
Lưu ý rằng curl
sẽ tự động phát hiện khi bạn chuyển hướng đầu ra chuẩn và gửi thông tin thời gian chuyển đổi đến stderr
(lỗi chuẩn), giúp bạn theo dõi quá trình.
curl chuyển hướng output sang file, hiển thị thông tin thời gian
Một điều quan trọng cần lưu ý là URL có thể chứa các ký tự đặc biệt có ý nghĩa đối với shell, như “?” hoặc “#”. Để tránh các vấn đề tiềm ẩn, bạn nên bao quanh URL bằng dấu nháy đơn. Nếu không chắc chắn, hãy cẩn thận và luôn đặt chúng trong dấu nháy:
curl 'info.cern.ch'
Việc tuân thủ nguyên tắc này sẽ giúp lệnh curl
của bạn hoạt động ổn định và chính xác trong mọi tình huống.
7. Cách Tải File Nhị Phân Sử Dụng curl
: Hướng Dẫn Từng Bước
Nếu bạn cố gắng sử dụng curl
để tải xuống một tệp nhị phân—như một hình ảnh, tài liệu Microsoft Word, hoặc bất kỳ tệp nào không phải văn bản thuần túy—bạn có thể sẽ thấy một thông báo lỗi cho biết “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
sẽ in trực tiếp nội dung phản hồi nhận được ra terminal, và đối với một tệp nhị phân như hình ảnh, đây gần như chắc chắn không phải là điều bạn muốn.
Để giải quyết vấn đề này, thông báo lỗi cũng gợi ý về tùy chọn --output
, cho phép bạn chỉ định một tệp để lưu đầu ra thay vì in nó ra màn hình. Bạn cũng có thể sử dụng -o
như một cách viết tắt tương đương:
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 của bạn. Tương tự như khi chuyển hướng đầu ra, khi curl
không còn in phản hồi ra màn hình, nó sẽ cung cấp nhiều thông tin chi tiết về thời gian tải xuống của bạn. Nếu bạn muốn một thanh tiến trình đơn giản hơn, bạn có thể 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
Ví dụ tải file ảnh bằng curl với thanh tiến trình
Sử dụng các tùy chọn này không chỉ giúp tải xuống các tệp nhị phân một cách an toàn mà còn cung cấp khả năng theo dõi tiến độ, tối ưu hóa trải nghiệm người dùng khi làm việc với curl
.
6. Cài Đặt Phần Mềm Qua Dòng Lệnh với curl
và Những Lưu Ý An Toàn
Đô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 curl
. Chẳng hạn, 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 hoàn toàn có thể tải xuống script này và chạy thủ công nếu muốn; dòng lệnh một dòng trên chỉ là cách nhanh hơn. Lưu ý rằng đầu ra—nội dung của script này—được truyền (piped) tới sh
, công cụ sẽ chạy nó như một script shell.
Việc sử dụng curl
được đề xuất trong ví dụ atuin
này sử dụng các tùy chọn sau:
--proto '=https'
: Đảm bảocurl
sử dụng giao thức HTTPS để tăng cường bảo mật.--tlsv1.2
: Buộccurl
sử dụng TLS phiên bản 1.2 trở lên, đảm bảo kết nối mã hóa an toàn.-L
: Tự động theo dõi các chuyển hướng (redirects). Điều này quan trọng nếu URL ban đầu chuyển hướng đến một URL khác.-sS
: Ẩn thanh tiến trình (silent) nhưng vẫn hiển thị thông báo lỗi (show errors).-f
: Coi một lỗi HTTP (ví dụ: mã trạng thái 4xx hoặc 5xx) là một lỗi lệnh. Điều này giúp đảm bảo rằng không có thông báo lỗi nào được truyền đếnsh
, tránh một hành động có khả năng nguy hiểm.
Lưu ý quan trọng về an toàn: Chạy một script shell được tải xuống từ internet tiềm ẩn rủi ro lớn vì bạn không thể 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 phải tự tin rằng bạn an toàn trước bất kỳ cuộc tấn công Man-in-the-Middle nào. 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 việc pipe trực tiếp, tải tệp xuống, kiểm tra nội dung của nó để đảm bảo an toàn trước khi bạn chạy. Sự thận trọng này là cực kỳ cần thiết để bảo vệ hệ thống của bạn.
5. Kiểm Tra Địa Chỉ IP Công Cộng của Bạn Chỉ Với Lệnh curl
Một trong những ứng dụng thực tế và nhanh chóng của curl
là để kiểm tra địa chỉ IP công cộng của bạn. Nhờ dịch vụ tại ifconfig.co
, bạn có thể dễ dàng thực hiện điều này:
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. Đây là một cách đơn giản và hiệu quả để biết IP mà mạng của bạn đang sử dụng để kết nối internet.
curl 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 trong script shell. Bạn có thể nhận thấy rằng bạn nhận được một kết quả rất khác nếu truy cập cùng một URL trong trình duyệt web của mình:
Trang chủ ifconfig.co khi truy cập qua trình duyệt web
Lý do cho sự khác biệt này là trang web hành xử khác nhau dựa trên user agent của bạn. Mặc định, curl
gửi một chuỗi user agent như “curl/8.7.1” trong tiêu đề User-Agent
. Nếu bạn cần đặt chuỗi này thành một giá trị khác, ví dụ cho mục đích kiểm thử, 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 mã HTML, giống như khi bạn truy cập bằng trình duyệt web. Điều này cho thấy sự linh hoạt của curl
trong việc giả lập các yêu cầu từ nhiều loại client khác nhau, một tính năng cực kỳ hữu ích cho việc kiểm tra và phát triển web.
curl với user agent tùy chỉnh hiển thị mã HTML từ ifconfig.co
4. Xem Header Phản Hồi và Yêu Cầu HTTP Bằng Lệnh curl
Trong quá trình debug hoặc kiểm tra các yêu cầu HTTP, đô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ể cần kiểm tra các tiêu đề cache để xem liệu có cần tải lại tệp hay không, hoặc tìm kiếm thông tin lỗi trong các tiêu đề phản hồi. Để xem riêng các tiêu đề phản hồi, bạn sử dụng tùy chọn -I
hoặc --head
:
curl -I example.com
Lệnh này sẽ gửi một yêu cầu HEAD đến máy chủ, yêu cầu chỉ trả về các tiêu đề mà không có nội dung thân (body) của phản hồi.
curl hiển thị các tiêu đề phản hồi HTTP
Tuy nhiên, không phải tất cả các máy chủ web đều hỗ trợ yêu cầu HEAD. Nếu bạn gặp lỗi khi sử dụng phương pháp này, bạn có thể chỉ định curl
gửi yêu cầu GET thông thường và chỉ xuất ra các tiêu đề:
curl -I -X GET example.com
Trong trường hợp bạn muốn xem cả 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ị toàn bộ quá trình giao tiếp giữa curl
và máy chủ, bao gồm các tiêu đề yêu cầu, tiêu đề phản hồi và thông tin chi tiết về kết nối.
curl với tùy chọn verbose hiển thị chi tiết cả tiêu đề yêu cầu và phản hồi
Việc hiểu rõ cách xem và phân tích các tiêu đề HTTP là một kỹ năng quan trọng, giúp bạn gỡ lỗi các vấn đề về kết nối, cache, và bảo mật trong phát triển web.
3. Tương Tác và Debug API Hiệu Quả với Công Cụ curl
Nếu bạn đang làm việc với API, các client chuyên dụng như Postman hoặc Insomnia sẽ giúp bạn tự động hóa và gỡ lỗi tác vụ. Tuy nhiên, curl
cũng cực kỳ hữu ích để khám phá cách một API hoạt động và kiểm tra nhanh các endpoint.
Dịch vụ DummyJSON là một nơi tuyệt vời để bắt đầu. Trang web này cung cấp một API ví dụ với dữ liệu giả mà bạn có thể sử dụng để kiểm tra 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 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ỉ bằng cách truyền 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 được trả về, 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.
Phản hồi JSON đơn giản từ DummyJSON khi dùng curl
Một khi bạn đã lấy được dữ liệu từ một API, bạn có thể dễ dàng xử lý nó bằng cách sử dụ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ách sử dụng jq
. Ví dụ sau đây lấy dữ liệu sản phẩm bằng curl
, sau đó chuyển nó đến jq
để trích xuất sản phẩm đầu tiên:
curl https://dummyjson.com/products | jq '.products[0]' | more
Trích xuất dữ liệu JSON sản phẩm bằng curl và jq
Sự kết hợp giữa curl
và các công cụ xử lý văn bản dòng lệnh khác như jq
tạo nên một bộ công cụ mạnh mẽ, cho phép bạn tương tác và phân tích dữ liệu API một cách hiệu quả ngay trên terminal.
2. Đọc Nguồn Cấp Dữ Liệu RSS Trực Tiếp Từ Terminal Bằng curl
curl
không chỉ dừng lại ở các trang web và API thông thường; nó còn là một công cụ tiện lợi để làm việc với các nguồn cấp dữ liệu (feed) như RSS. RSS (Really Simple Syndication) là một định dạng XML được sử dụng để xuất bản các bài viết, tin tức, blog hoặc podcast định kỳ. Với curl
, bạn có thể dễ dàng đọc và kiểm tra nội dung của một nguồn cấp dữ liệu RSS ngay từ terminal của mình.
Để lấy nội dung của một nguồn cấp dữ liệu RSS, bạn có thể sử dụng lệnh sau:
curl -s https://www.w3.org/blog/feed/ | more
Tùy chọn -s
(silent) được sử dụng để ẩn thanh tiến trình và các thông tin không cần thiết khác, chỉ hiển thị nội dung chính của feed. Đầu ra sẽ là dữ liệu XML định dạng của feed.
Dữ liệu RSS định dạng XML được lấy qua curl
Nếu bạn có libxml
được cài đặt trên hệ thống, bạn có thể xử lý đầu ra XML này bằng công cụ xmllint
. xmllint
cho phép bạn sử dụng biểu thức XPath để trích xuất các phần cụ thể của dữ liệu XML. Ví dụ, để trích xuất tiêu đề của kênh từ nguồn cấp dữ liệu RSS, bạn có thể sử dụng pipeline sau:
curl -s https://www.w3.org/blog/feed/ | xmllint --xpath '//channel/title/text()' -
Trích xuất tiêu đề kênh RSS bằng curl và xmllint
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. Khả năng kết hợp curl
với các công cụ xử lý XML/JSON khác như xmllint
hoặc jq
làm cho nó trở thành một công cụ cực kỳ linh hoạt cho các tác vụ phân tích và tự động hóa dữ liệu web.
1. Sử Dụng libcurl
trong Lập Trình: API Mạnh Mẽ Đằng Sau Công Cụ Dòng Lệnh
Dự án cURL không chỉ cung cấp công cụ dòng lệnh curl
mà chúng ta đã thảo luận. Nó còn bao gồm một thư viện mạnh mẽ, libcurl
, mà chính công cụ curl
cũng sử dụng. libcurl
được thiết kế để có tính di động cao và có sẵn cho rất nhiều hệ điều hành, bao gồm Linux, Windows, macOS và Android.
libcurl
đi kèm với một API C, nhưng có rất nhiều bindings (liên kết) cho các ngôn ngữ lập trình khác như C++, Python, Rust và Go. Điều này cho phép các nhà phát triển tích hợp khả năng truyền dữ liệu mạng của curl
trực tiếp vào các ứng dụng của họ, tận dụng sự ổn định và hiệu quả mà libcurl
mang lại.
Thư viện này phản ánh rất nhiều 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 PHP để thực hiện một yêu cầu web thông qua libcurl
:
<?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);
?>
Trong ví dụ trên:
curl_init()
: Khởi tạo một phiêncurl
và trả về một handle mà bạn có thể sử dụng để truy cập phiên đó.curl_setopt()
: Cho phép bạn kiểm soát hành vi của thư viện bằng cách thiết lập các tùy chọn màcurl
hỗ trợ (ví dụ:CURLOPT_FILE
tương đương với tùy chọn--output
của công cụ dòng lệnh để ghi phản hồi vào một tệp).curl_exec()
: Thực sự gửi yêu cầu HTTP.curl_error()
vàcurl_close()
: Là các hàm quản trị hữu ích để kiểm tra lỗi và đóng phiêncurl
.
Ví dụ này sử dụng cài đặt CURLOPT_FILE
để ghi nội dung phản hồi vào một file handle đã mở. Điều này tương đương với tùy chọn --output
của công cụ curl
dòng lệnh, minh họa cách các khái niệm cốt lõi được duy trì nhất quán giữa công cụ và thư viện. libcurl
cung cấp một nền tảng vững chắc cho bất kỳ ứng dụng nào cần khả năng truyền dữ liệu mạng mạnh mẽ và đáng tin cậy.
Kết luận:
Qua bài viết này, chúng ta đã cùng nhau khám phá 8 trường hợp sử dụng mạnh mẽ và đa năng của lệnh curl
, từ những tác vụ cơ bản như tải trang web và file, đến các ứng dụng phức tạp hơn như tương tác API, đọc RSS feed, kiểm tra IP công cộng và thậm chí là sử dụng libcurl
trong lập trình. curl
không chỉ là một công cụ dòng lệnh đơn thuần mà còn là một “con dao đa năng” thực sự, giúp bạn làm chủ thế giới web và tự động hóa nhiều tác vụ liên quan đến mạng một cách hiệu quả.
Hy vọng rằng những hướng dẫn chi tiết và ví dụ minh họa trên tinmoicongnghe.com đã trang bị cho bạn kiến thức và kỹ năng cần thiết để khai thác tối đa tiềm năng của curl
trong công việc hàng ngày hoặc các dự án công nghệ của mình. Hãy bắt đầu thực hành ngay hôm nay để biến curl
thành một phần không thể thiếu trong bộ công cụ của bạn.
Bạn có những mẹo hay cách sử dụng curl
độc đáo nào khác không? Hãy chia sẻ kinh nghiệm của bạn trong phần bình luận bên dưới để cộng đồng tinmoicongnghe.com cùng học hỏi! Đừng quên tham khảo thêm các bài viết chuyên sâu khác về công nghệ và lập trình tại website của chúng tôi để không bỏ lỡ những thông tin hữu ích.