Image default
Máy Tính

Khám Phá Sức Mạnh Đa Năng Của Lệnh Curl: Hướng Dẫn Toàn Diện Từ A-Z

Trong thế giới công nghệ, curl là một trong những công cụ dòng lệnh mạnh mẽ và linh hoạt nhất mà bất kỳ ai làm việc với mạng, API hoặc hệ thống Linux/Unix đều nên thành thạo. Được phát triển để truyền dữ liệu với cú pháp URL, curl hỗ trợ một loạt các giao thức bao gồm HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, DICT, TELNET, LDAP, LDAPS, FILE và GOPHER. Sự đa năng và khả năng triển khai HTTP toàn diện của nó có nghĩa là, nếu có một URL cho nó, curl có thể thực hiện được.

Bài viết này của tinhoccongnghe.net sẽ đi sâu vào các trường hợp sử dụng thực tế của curl, từ những tác vụ cơ bản như truy xuất trang web đến những ứng dụng phức tạp hơn như tương tác với API và xử lý dữ liệu. Chúng tôi sẽ hướng dẫn bạn cách tận dụng tối đa công cụ này, giúp bạn làm chủ các lệnh curl để tối ưu hóa công việc và tự động hóa các tác vụ liên quan đến mạng một cách hiệu quả nhất.

1. Truy Xuất Trang Web Một Cách Đơn Giản

Ở dạng cơ bản nhất, lệnh curl được dùng để truy xuất một URL và hiển thị nội dung của nó ngay 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 mà không cần mở trình duyệt.

Lệnh curl cơ bản

Để truy xuất một trang web, bạn chỉ cần gõ curl theo sau là URL mong muốn:

curl info.cern.ch

Nội dung hiển thị 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ó.

Kết quả từ một yêu cầu curl đơn giản hiển thị mã nguồn HTML.Kết quả từ một yêu cầu curl đơn giản hiển thị mã nguồn HTML.

Lưu nội dung trang web vào file

Bạn có thể dễ dàng chuyển hướng đầu ra này vào một tệp tin để lưu trữ trang web:

curl info.cern.ch > info.cern.ch.html

curl đủ thông minh để nhận biết rằng bạn đang chuyển hướng đầu ra tiêu chuẩn và sẽ gửi thông tin thời gian chuyển giao đến stderr, giúp bạn theo dõi quá trình.

Một lệnh curl với đầu ra được chuyển hướng đến một tệp, hiển thị thông tin thời gian cho quá trình truyền.Một lệnh curl với đầu ra được chuyển hướng đến một tệp, hiển thị thông tin thời gian cho quá trình truyền.

Lưu ý về ký tự đặc biệt trong URL

Một URL có thể chứa các ký tự đặc biệt có ý nghĩa riêng trong shell, như “?” hoặc “#”. Để tránh các vấn đề tiềm ẩn, hãy đảm bảo bạn đặt URL trong 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 đơn:

curl 'info.cern.ch'

2. Tải Tệp Tin Hiệu Quả

Nếu bạn cố gắng sử dụng curl để tải một tệp tin nhị phân – như một hình ảnh hoặc tài liệu Microsoft Word – bạn có thể gặp thông báo lỗi “Binary output can mess up your terminal.” Điều này xảy ra vì curl sẽ in trực tiếp phần thân phản hồi mà nó nhận được ra màn hình, điều mà bạn gần như chắc chắn không muốn làm đối với các tệp nhị phân.

Lệnh -o hoặc --output

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 nó ra terminal. Bạn cũng có thể dùng -o như một tùy chọn 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ại URL đó vào thư mục hiện tại của bạn. Tương tự như khi chuyển hướng đầu ra, curl sẽ không in nội dung ra màn hình mà thay vào đó cung cấp chi tiết về thời gian tải xuống.

Hiển thị thanh tiến trình

Nếu bạn muốn một thanh tiến trình đơn giản thay vì thông tin chi tiết, 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

Đầu ra từ curl hiển thị hai dạng tải xuống tệp, sau đó là một thanh tiến trình đơn giản một dòng.Đầu ra từ curl hiển thị hai dạng tải xuống tệp, sau đó là một thanh tiến trình đơn giản một dòng.

3. Cài Đặt Phần Mềm Qua curl và Các Tùy Chọn Bảo Mật

Bạn có thể thường xuyên 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. 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 đó trong trình duyệt web, bạn sẽ thấy một shell script thực hiện cài đặt và thiết lập. Bạn có thể tải nó xuống và chạy thủ công nếu muốn, nhưng lệnh một dòng trong shell chỉ là một cách nhanh hơn. Lưu ý rằng đầu ra – nội dung của script này – được chuyển tiếp (piped) đến sh, lệnh này sẽ chạy nó như một shell script.

Giải thích các tùy chọn quan trọng

Cách sử dụng curl trong ví dụ atuin sử dụng các tùy chọn sau:

  • --proto '=https': Đảm bảo curl sử dụng giao thức HTTPS. Đây là một lớp bảo mật quan trọng, mã hóa dữ liệu giữa bạn và máy chủ.
  • --tlsv1.2: Buộc curl sử dụng TLS phiên bản 1.2 hoặc cao hơn. TLS (Transport Layer Security) là giao thức bảo mật dữ liệu giao tiếp qua mạng máy tính.
  • -L: Tự động theo dõi các chuyển hướng. Nếu URL ban đầu chuyển hướng đến một URL khác, curl sẽ theo dõi đến đích cuối cùng.
  • -sS: Ngăn curl hiển thị thanh tiến trình, nhưng vẫn hiển thị thông báo lỗi nếu có. (-s là silent, -S là show errors).
  • -f: Xử lý lỗi HTTP (ví dụ: mã trạng thái 4xx hoặc 5xx) như một lỗi lệnh. Điều này đảm bảo rằng không có thông báo lỗi HTTP nào được chuyển tiếp đến sh, tránh một hành động có khả năng nguy hiểm.

Cảnh báo về an toàn khi cài đặt phần mềm

Việc chạy một shell script được tải xuống từ internet tiềm ẩn 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 phải tự tin rằng bạn an toàn trước bất kỳ cuộc tấn công trung gian nào (Man-in-the-Middle attacks). 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 chuyển tiếp trực tiếp (| sh), tải tệp xuống, kiểm tra nội dung để đảm bảo nó an toàn trước khi chạy.

4. Kiểm Tra Địa Chỉ IP Công Cộng của Bạn

Đây là một ứng dụng thực tế của curl giúp bạn nhanh chóng và dễ dàng tìm ra địa chỉ IP công cộng của mình, nhờ vào dịch vụ tại ifconfig.co:

curl ifconfig.co

Trang web này sẽ phản hồi bằng địa chỉ IP công cộng của bạn.

Đầu ra từ một yêu cầu curl đến ifconfig.co hiển thị một địa chỉ IP.Đầu ra từ một yêu cầu curl đến ifconfig.co hiển thị một địa chỉ IP.

Đầu ra mặc định là văn bản thuần túy, điều này làm cho nó trở thành một nguồn tài nguyên tuyệt vời cho các tác vụ tự động hóa.

Tùy chỉnh User Agent

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 bạn truy cập cùng một URL trong trình duyệt web của mình.

Trang chủ ifconfig.co trong trình duyệt web với các chi tiết bao gồm địa chỉ IP công cộng của người dùng, quốc gia và khu vực của họ.Trang chủ ifconfig.co trong trình duyệt web với các chi tiết bao gồm địa chỉ IP công cộng của người dùng, quốc gia và khu vực của họ.

Điều này là do trang web hoạt động khác nhau dựa trên user agent của bạn. Mặc định, curl gửi một chuỗi như “curl/8.7.1” trong tiêu đề User-Agent. 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 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 bằng HTML, giống như khi bạn truy cập bằng trình duyệt web.

Đầu ra từ một yêu cầu curl đến ifconfig.co với user agent đã sửa đổi hiển thị mã nguồn HTML trong phản hồi.Đầu ra từ một yêu cầu curl đến ifconfig.co với user agent đã sửa đổi hiển thị mã nguồn HTML trong phản hồi.

5. Hiển Thị Tiêu Đề Phản Hồi hoặc Yêu Cầu

Đôi khi, bạn chỉ muốn lấy các tiêu đề phản hồi từ một URL. Bạn có thể đang gỡ lỗi một lỗi hoặc kiểm tra các tiêu đề cache để xem liệu bạn có cần tải lại tệp hay không.

Xem tiêu đề phản hồi với -I hoặc --head

Để chỉ xem các tiêu đề phản hồi, 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 bao gồm Content-Type và Last-Modified.Lệnh curl hiển thị các tiêu đề phản hồi bao gồm Content-Type và Last-Modified.

Lệnh này sẽ gửi một yêu cầu HEAD, mà không phải tất cả các máy chủ web đều hỗ trợ. Nếu bạn gặp lỗi khi sử dụng phương pháp này, bạn có thể yêu cầu curl gửi một yêu cầu GET và chỉ xuất ra các tiêu đề:

curl -I -X GET example.com

Xem tiêu đề yêu cầu với --verbose

Nếu bạn muốn xem các tiêu đề yêu cầu mà curl gửi đi, hãy sử dụng tùy chọn --verbose hoặc -v:

curl -I -v example.com

Đầu ra từ curl với các tùy chọn --verbose và -I để hiển thị cả tiêu đề phản hồi và yêu cầu.Đầu ra từ curl với các tùy chọn –verbose và -I để hiển thị cả tiêu đề phản hồi và yêu cầu.

6. Truy Cập API REST và Xử Lý Dữ Liệu

Khi bạn làm việc với một API, các client chuyên dụng như Postman hoặc Posting 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 điểm khởi đầu tuyệt vời. 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 ứ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, xác thực, và mô phỏng độ trễ thời gian hoặc phản hồi ngẫu nhiên.

Sử dụng DummyJSON làm ví dụ

Kiểm tra dịch vụ với curl đơn giản như việc truyền endpoint phù 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:

Đầu ra định dạng JSON từ một yêu cầu curl đến dummyjson.com.Đầu ra định dạng JSON từ một yêu cầu curl đến dummyjson.com.

Xử lý dữ liệu JSON với jq

Sau khi bạn đã 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. Luồng lệnh này sẽ 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

Dữ liệu định dạng JSON đại diện cho một sản phẩm thu được từ dummyjson.com bằng cách sử dụng curl và jq.Dữ liệu định dạng JSON đại diện cho một sản phẩm thu được từ dummyjson.com bằng cách sử dụng curl và jq.

7. Lấy Nguồn Cấp RSS (RSS Feed)

Một trong những dự án cá nhân của tác giả là một client RSS dựa trên shell. Cốt lõi của nó là curl 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ể lấy một nguồn cấp RSS và kiểm tra 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 qua một yêu cầu curl đến một URL nguồn cấp RSS.Dữ liệu định dạng XML thu được qua một yêu cầu curl đến một URL nguồn cấp RSS.

Xử lý XML với xmllint

Nếu bạn đã cài đặt libxml, bạn có thể xử lý đầu ra XML bằng xmllint:

curl -s https://www.w3.org/blog/feed/ | xmllint --xpath '//channel/title/text()' -

Luồ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:

Một phần dữ liệu duy nhất, đại diện cho tiêu đề của nguồn cấp RSS, được trích xuất bằng cách sử dụng curl và xmllint.Một phần dữ liệu duy nhất, đại diện cho tiêu đề của nguồn cấp RSS, được trích xuất bằng cách sử dụng curl và xmllint.

8. Sử Dụng libcurl Trong Lập Trình

Dự án cURL không chỉ là curl, công cụ dòng lệnh. Nó còn bao gồm một thư viện, libcurl, mà chính curl cũng sử dụng. Thư viện này có tính di động cao và có sẵn cho nhiều hệ điều hành bao gồm Linux, Windows, macOS và Android. libcurl đi kèm với API C, nhưng có các binding cho nhiều ngôn ngữ khác như C++, Python, Rust và Go.

Giới thiệu libcurl

Thư viện này phản ánh phần lớn những gì công cụ dòng lệnh thực hiện, đặc biệt là các tùy chọn và hành vi của chúng. Đ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 mạnh mẽ vào ứng dụng của họ một cách dễ dàng.

Ví dụ PHP cơ bản

Đâ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() bắt đầu một phiên và trả về một handle mà bạn có thể sử dụng để truy cập 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(). curl_exec() thực sự gửi yêu cầu trong khi curl_error()curl_close() là các hàm quản trị hữu ích.

Ví dụ này sử dụng thiết lập CURLOPT_FILE để ghi phần thân phản hồi 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

Qua bài viết này, chúng ta đã khám phá 8 trường hợp sử dụng mạnh mẽ và thực tế của lệnh curl, từ việc truy xuất nội dung trang web, tải xuống tệp tin, đến tương tác với các API và xử lý dữ liệu XML/JSON. curl không chỉ là một công cụ tiện lợi cho các tác vụ hàng ngày trên dòng lệnh mà còn là một thư viện libcurl mạnh mẽ, cung cấp khả năng truyền dữ liệu mạng linh hoạt cho các ứng dụng lập trình.

Việc nắm vững curl sẽ trang bị cho bạn một công cụ vô giá để gỡ lỗi mạng, tự động hóa tác vụ, kiểm thử API và thực hiện nhiều thao tác dữ liệu phức tạp khác. Hãy tiếp tục thực hành với các ví dụ và tùy chọn khác của curl để khai thác triệt để tiềm năng của nó. Nếu bạn muốn tìm hiểu sâu hơn về các công cụ dựa trên terminal khác, hãy khám phá thêm về các lệnh Git cơ bản hoặc các ví dụ shell script để mở rộng bộ kỹ năng dòng lệnh của mình!

Related posts

10 Sai Lầm Phổ Biến Cần Tránh Khi Tự Build PC Gaming & Làm Việc

Administrator

Những Thiết Bị Công Nghệ Bền Bỉ Đến Mức Bạn Sẽ Dùng Cho Đến Khi Chúng Hỏng Hóc

Administrator

Giải pháp bất ngờ: Đặt Bàn Phím Không Dây Lên Đùi Giúp Tôi Cải Thiện Tư Thế và Tăng Năng Suất Làm Việc

Administrator

Leave a Comment