Kiến thức Hữu ích 😍

Curl là gì? Hướng dẫn dùng curl trong giao tiếp mạng


Bạn đã bao giờ nghe đến công cụ curl nhưng vẫn chưa thực sự hiểu rõ nó là gì và làm thế nào nó có thể giúp bạn truyền tải dữ liệu mạng một cách hiệu quả chưa? Trong thế giới số hiện đại, việc tương tác với các dịch vụ web và API đã trở thành một phần không thể thiếu. Từ việc lấy thông tin thời tiết đến quản lý cơ sở hạ tầng đám mây, mọi thứ đều dựa trên giao tiếp mạng.

Trong quá trình phát triển phần mềm hay quản trị hệ thống, việc gửi và nhận dữ liệu qua các giao thức mạng luôn đòi hỏi những công cụ tiện lợi, mạnh mẽ và linh hoạt. Lập trình viên cần kiểm tra các điểm cuối (endpoint) của API, trong khi quản trị viên hệ thống cần tự động hóa các tác vụ bảo trì máy chủ. Đây chính là lúc một công cụ dòng lệnh đa năng trở nên vô giá.

Curl chính là giải pháp mà bạn đang tìm kiếm. Nó là một công cụ hữu ích, mạnh mẽ, hỗ trợ gửi yêu cầu mạng qua nhiều giao thức phổ biến như HTTP, HTTPS, FTP, và nhiều hơn nữa. Bài viết này sẽ là kim chỉ nam của bạn, giải thích cặn kẽ curl là gì, cách sử dụng trong các kịch bản thực tế, khám phá các tùy chọn nổi bật, cung cấp các ví dụ minh họa chi tiết, đồng thời phân tích ưu và nhược điểm khi sử dụng curl trong công việc hàng ngày.

Curl là gì và vai trò trong giao tiếp mạng

Để thực sự làm chủ được các tác vụ liên quan đến mạng, việc hiểu rõ về curl là bước khởi đầu quan trọng. Đây không chỉ là một lệnh đơn thuần, mà là một công cụ nền tảng cho rất nhiều hoạt động kỹ thuật.

Khái niệm về curl

Curl, viết tắt của “Client for URLs”, là một công cụ dòng lệnh (command-line tool) và thư viện phần mềm mã nguồn mở. Chức năng chính của nó là truyền và nhận dữ liệu bằng cú pháp URL. Bạn có thể hình dung curl như một con dao đa năng của Thụy Sĩ dành cho các nhà phát triển và quản trị viên hệ thống khi cần tương tác với các tài nguyên trên mạng.

Điều làm cho curl trở nên đặc biệt mạnh mẽ là khả năng hỗ trợ một danh sách dài các giao thức mạng. Nó không chỉ giới hạn ở HTTP và HTTPS cho web, mà còn hoạt động trơn tru với FTP, FTPS, SCP, SFTP để truyền file, cũng như SMTP, POP3, IMAP cho email và nhiều giao thức khác. Tính linh hoạt này cho phép bạn thực hiện gần như mọi loại yêu cầu mạng chỉ với một công cụ duy nhất.

Hình minh họa

Vai trò của curl trong giao tiếp mạng

Trong hệ sinh thái công nghệ, curl đóng một vai trò không thể thiếu và xuất hiện ở khắp mọi nơi. Đối với lập trình viên, curl là trợ thủ đắc lực để kiểm tra và gỡ lỗi (debug) các API. Thay vì phải viết một đoạn mã hoàn chỉnh chỉ để gửi một yêu cầu POST đơn giản, họ có thể dùng curl ngay trên terminal để kiểm tra xem API có trả về kết quả như mong đợi hay không.

Đối với quản trị viên hệ thống, curl là công cụ vàng để tự động hóa các tác vụ. Họ có thể viết các kịch bản (script) sử dụng curl để kiểm tra tình trạng hoạt động của các dịch vụ web, tự động tải về các bản cập nhật hoặc sao lưu dữ liệu từ một máy chủ từ xa qua FTP. Ví dụ, một cron job có thể chạy một lệnh curl định kỳ để đảm bảo website luôn sẵn sàng và gửi cảnh báo nếu có sự cố. Do đó, curl không chỉ là một tiện ích, mà là một thành phần cốt lõi giúp duy trì sự ổn định và hiệu quả của hệ thống.

Cách sử dụng curl để gửi và nhận dữ liệu qua HTTP và các giao thức khác

Sức mạnh của curl nằm ở sự đơn giản trong cú pháp nhưng lại cực kỳ linh hoạt trong ứng dụng. Chỉ với một vài lệnh cơ bản, bạn đã có thể bắt đầu tương tác với thế giới mạng.

Sử dụng curl gửi yêu cầu HTTP GET/POST

Giao thức HTTP là nền tảng của World Wide Web, và curl làm cho việc tương tác với nó trở nên dễ dàng. Hai phương thức phổ biến nhất là GET và POST.

Yêu cầu GET được sử dụng để truy xuất dữ liệu từ một máy chủ. Đây là phương thức mặc định của curl. Để lấy nội dung của một trang web, bạn chỉ cần gõ lệnh:

curl https://example.com

Lệnh này sẽ tải về mã HTML của trang web và hiển thị trực tiếp trên cửa sổ dòng lệnh của bạn. Đây là cách nhanh nhất để xem nội dung thô của một tài nguyên web.

Trong khi đó, yêu cầu POST được dùng để gửi dữ liệu đến một máy chủ, thường là để tạo một tài nguyên mới hoặc gửi thông tin biểu mẫu. Với curl, bạn sử dụng tùy chọn -X POST để chỉ định phương thức và -d (viết tắt của –data) để đính kèm dữ liệu.

Ví dụ, để gửi dữ liệu dạng biểu mẫu đến một API:

curl -X POST -d "name=azweb&product=hosting" https://example.com/api/register

Lệnh này sẽ gửi một yêu cầu POST đến /api/register với hai trường dữ liệu là nameproduct.

Hình minh họa

Sử dụng curl với các giao thức FTP, SMTP…

Curl không chỉ giới hạn ở HTTP. Nó còn là một công cụ tuyệt vời để làm việc với các giao thức khác như FTP (File Transfer Protocol) và SMTP (Simple Mail Transfer Protocol).

Để tải một tệp tin từ một máy chủ FTP, bạn chỉ cần cung cấp URL của tệp đó. Curl sẽ tự động xử lý việc kết nối và tải về.

Ví dụ, để tải tệp file.txt từ máy chủ FTP, bạn có thể dùng lệnh:

curl -u username:password -o downloaded_file.txt ftp://ftp.example.com/file.txt

Trong lệnh trên, tùy chọn -u dùng để cung cấp thông tin đăng nhập, và -o để lưu nội dung tải về vào một tệp tin có tên downloaded_file.txt.

Bạn thậm chí có thể sử dụng curl để gửi email qua một máy chủ SMTP. Mặc dù ít phổ biến hơn, điều này rất hữu ích trong các kịch bản tự động hóa cần gửi thông báo qua email mà không cần cài đặt một ứng dụng email đầy đủ. Cú pháp sẽ phức tạp hơn một chút, yêu cầu chỉ định máy chủ SMTP, thông tin xác thực và nội dung email.

Các tùy chọn phổ biến trong curl và cách áp dụng

Để khai thác tối đa sức mạnh của curl, bạn cần nắm vững các tùy chọn (options) của nó. Các tùy chọn này cho phép bạn tùy chỉnh yêu cầu mạng một cách chi tiết để đáp ứng chính xác nhu-cầu của mình.

Các tùy chọn cơ bản thường sử dụng

Đây là những tùy chọn mà bạn sẽ sử dụng gần như hàng ngày khi làm việc với curl. Chúng rất dễ nhớ và cực kỳ hữu ích.

  • -X <METHOD>: Tùy chọn này cho phép bạn chỉ định phương thức HTTP muốn sử dụng. Các giá trị phổ biến bao gồm GET, POST, PUT, DELETE. Mặc dù GET là mặc định, việc chỉ định rõ ràng giúp mã của bạn dễ đọc hơn. Ví dụ: curl -X PUT ...
  • -d <data>: Dùng để gửi dữ liệu trong một yêu cầu POST. Dữ liệu này thường ở dạng key=value và được mã hóa URL. Ví dụ: curl -d "user=admin"
  • -H <header>: Cho phép bạn thêm hoặc tùy chỉnh các HTTP header. Điều này cực kỳ quan trọng khi làm việc với các API yêu cầu định dạng dữ liệu cụ thể (như JSON) hoặc mã thông báo xác thực (authentication token). Ví dụ: curl -H "Content-Type: application/json"
  • -o <file>: Thay vì in kết quả ra màn hình, tùy chọn này sẽ lưu đầu ra vào một tệp tin được chỉ định. Rất tiện lợi khi bạn cần tải về một tệp tin. Ví dụ: curl -o logo.png https://example.com/logo.png

Hình minh họa

Tùy chọn nâng cao hữu ích

Khi các tác vụ trở nên phức tạp hơn, các tùy chọn nâng cao sau đây sẽ giúp bạn xử lý tình huống một cách chuyên nghiệp.

  • -I: Tùy chọn này yêu cầu curl chỉ lấy về phần header của phản hồi (response) từ máy chủ, bỏ qua phần thân (body). Nó rất hữu ích để nhanh chóng kiểm tra mã trạng thái HTTP (như 200 OK, 404 Not Found), loại nội dung (Content-Type) hoặc các thông tin metadata khác mà không cần tải toàn bộ nội dung.
  • -L: Viết tắt của --location, tùy chọn này yêu cầu curl tự động đi theo các chuyển hướng (redirect). Nhiều trang web sử dụng mã trạng thái 3xx để chuyển hướng người dùng từ HTTP sang HTTPS hoặc từ một URL cũ sang URL mới. Nếu không có -L, curl sẽ chỉ hiển thị thông báo chuyển hướng thay vì truy cập vào trang đích.
  • -u <user:password>: Dùng để cung cấp thông tin xác thực cơ bản (HTTP Basic Authentication). Curl sẽ tự động mã hóa thông tin này và gửi trong header Authorization. Ví dụ: curl -u admin:12345 https://api.example.com/secure

Việc kết hợp các tùy chọn này cho phép bạn tạo ra những lệnh curl mạnh mẽ, giải quyết được hầu hết các bài toán giao tiếp mạng thông thường.

Các ví dụ minh họa lệnh curl trong thực tế

Lý thuyết sẽ trở nên dễ hiểu hơn rất nhiều khi được áp dụng vào các ví dụ thực tế. Dưới đây là một số kịch bản phổ biến mà bạn có thể sử dụng curl để giải quyết công việc hàng ngày.

Kiểm tra trạng thái HTTP của website

Đây là một trong những ứng dụng cơ bản nhưng cực kỳ quan trọng của curl, đặc biệt với các quản trị viên hệ thống. Bạn cần biết liệu một trang web có đang hoạt động hay không và mã trạng thái nó trả về là gì. Sử dụng tùy chọn -I là cách hiệu quả nhất.

Giả sử bạn muốn kiểm tra trang chủ của AZWEB:

curl -I https://azweb.vn

Kết quả trả về sẽ không phải là nội dung HTML của trang, mà là các thông tin trong phần header của phản hồi. Bạn sẽ thấy dòng đầu tiên là HTTP/2 200, cho biết kết nối thành công (mã 200 OK). Ngoài ra, bạn còn có thể xem các thông tin khác như content-type, date, server,… Điều này giúp chẩn đoán nhanh các vấn đề mà không cần tải toàn bộ trang.

Hình minh họa

Gửi dữ liệu JSON tới API

Ngày nay, hầu hết các API hiện đại đều sử dụng định dạng JSON (JavaScript Object Notation) để trao đổi dữ liệu. Curl hoàn toàn có thể xử lý việc này một cách dễ dàng. Bạn cần kết hợp ba tùy chọn: -X POST để chỉ định phương thức, -H để khai báo Content-Typeapplication/json, và -d để gửi nội dung JSON.

Ví dụ, gửi thông tin người dùng mới đến một API:

curl -X POST -H "Content-Type: application/json" -d '{"username":"nguyenvana", "email":"nguyenvana@example.com"}' https://api.example.com/users

Lưu ý rằng chuỗi JSON được đặt trong dấu nháy đơn (') để tránh xung đột với dấu nháy kép (") bên trong nó. Lệnh này mô phỏng chính xác cách một ứng dụng frontend gửi dữ liệu đến backend.

Hình minh họa

Tải file với curl

Tải tệp tin là một tác vụ không thể thiếu. Sử dụng tùy chọn -o hoặc -O giúp việc này trở nên đơn giản. Tùy chọn -o cho phép bạn đặt tên tệp tin đầu ra, trong khi -O (chữ O viết hoa) sẽ tự động sử dụng tên tệp gốc từ URL.

Ví dụ, để tải một tệp nén và lưu với tên archive.zip:

curl -o archive.zip https://example.com/files/archive.zip

Nếu bạn muốn giữ nguyên tên archive.zip từ URL, bạn có thể dùng:

curl -O https://example.com/files/archive.zip

Tùy chọn -L cũng rất quan trọng ở đây, vì nhiều liên kết tải xuống thường đi qua một hoặc nhiều lần chuyển hướng trước khi đến tệp tin thực sự.

Ứng dụng của curl trong lập trình và quản trị hệ thống

Vượt ra ngoài những lệnh đơn lẻ, sức mạnh thực sự của curl được bộc lộ khi nó được tích hợp vào các quy trình lớn hơn trong lập trình và quản trị hệ thống. Nó trở thành cầu nối tự động hóa giữa các máy và dịch vụ.

Một trong những ứng dụng phổ biến nhất là tự động hóa việc gửi và nhận dữ liệu từ API trong các kịch bản (scripts). Thay vì phải viết code phức tạp bằng Python hay Node.js chỉ để gọi một API, bạn có thể nhúng một lệnh curl đơn giản vào trong một kịch bản shell (bash script). Ví dụ, bạn có thể viết một script tự động lấy dữ liệu thời tiết hàng ngày từ một API và ghi vào log file, hoặc một script tự động đăng bài lên mạng xã hội thông qua API của nó.

Hình minh họa

Trong lĩnh vực kiểm thử và gỡ lỗi (testing & debugging), curl là công cụ không thể thiếu. Khi phát triển một API mới, lập trình viên có thể nhanh chóng dùng curl để gửi các loại yêu cầu khác nhau (GET, POST, PUT, DELETE) với các loại dữ liệu đa dạng (form data, JSON, XML) để kiểm tra xem API của mình có xử lý đúng mọi trường hợp hay không. Nó giúp xác nhận các endpoint hoạt động chính xác trước khi tích hợp vào ứng dụng frontend hoặc các dịch vụ khác.

Đối với quản trị viên hệ thống, curl là công cụ đắc lực cho việc giám sát và bảo trì. Họ có thể viết script dùng curl để thực hiện “health check” – kiểm tra định kỳ xem các dịch vụ web có còn “sống” hay không. Nếu lệnh curl không trả về mã trạng thái 200 OK, script có thể tự động gửi cảnh báo cho đội ngũ kỹ thuật. Ngoài ra, curl còn được dùng để tự động hóa việc sao lưu. Một script có thể dùng curl để tải về các tệp tin cấu hình quan trọng hoặc các bản sao lưu cơ sở dữ liệu từ một máy chủ từ xa qua giao thức FTP hoặc SFTP một cách an toàn và định kỳ.

Lợi ích và hạn chế khi sử dụng curl

Bất kỳ công cụ nào cũng có những điểm mạnh và điểm yếu riêng. Hiểu rõ chúng giúp bạn quyết định khi nào nên và không nên sử dụng curl để đạt hiệu quả cao nhất trong công việc.

Lợi ích

Curl được yêu thích trên toàn thế giới nhờ vào những ưu điểm vượt trội mà nó mang lại.

  • Hỗ trợ đa giao thức và đa nền tảng: Đây là lợi ích lớn nhất của curl. Khả năng làm việc với hàng loạt giao thức như HTTP, HTTPS, FTP, SMTP, LDAP… trên hầu hết các hệ điều hành (Linux, macOS, Windows) biến nó thành một công cụ vạn năng cho mọi tác vụ liên quan đến mạng.
  • Nhẹ và linh hoạt: Curl là một ứng dụng dòng lệnh, không có giao diện đồ họa rườm rà. Điều này giúp nó cực kỳ nhẹ, tiêu thụ ít tài nguyên hệ thống và khởi động gần như tức thì.
  • Dễ dàng tích hợp vào script: Vì là công cụ dòng lệnh, curl có thể được gọi và điều khiển dễ dàng từ bất kỳ ngôn ngữ kịch bản nào, từ Bash shell, Python cho đến PowerShell. Điều này mở ra khả năng tự động hóa vô tận.
  • Mã nguồn mở và miễn phí: Curl được phát triển và duy trì bởi một cộng đồng năng động. Việc nó hoàn toàn miễn phí và mã nguồn mở giúp bạn yên tâm sử dụng trong mọi dự án, từ cá nhân đến thương mại, mà không lo về chi phí bản quyền.

Hình minh họa

Hạn chế

Tuy nhiên, curl cũng có một vài hạn chế mà người dùng cần lưu ý.

  • Giao diện dòng lệnh không thân thiện với người mới: Đối với những người không quen làm việc với terminal, việc phải nhớ các lệnh và tùy chọn có thể là một rào cản lớn ban đầu. Nó thiếu đi sự trực quan của các công cụ có giao diện đồ họa (GUI) như Postman hay Insomnia.
  • Không phù hợp cho các tác vụ phức tạp cần tương tác: Curl được thiết kế để thực hiện các giao dịch mạng một lần và kết thúc. Nó không phù hợp cho các kịch bản đòi hỏi tương tác người dùng liên tục, quản lý session phức tạp, hay mô phỏng hành vi người dùng trên trình duyệt (như thực thi JavaScript). Trong những trường hợp đó, các công cụ như Selenium hay Puppeteer sẽ là lựa chọn tốt hơn.

Các vấn đề thường gặp khi sử dụng curl và cách khắc phục

Khi sử dụng curl, bạn có thể sẽ gặp phải một số lỗi phổ biến. Biết cách nhận diện và khắc phục chúng sẽ giúp bạn tiết kiệm rất nhiều thời gian và công sức.

Lỗi kết nối mạng và timeout

Đây là nhóm lỗi phổ biến nhất, thường xảy ra khi curl không thể thiết lập kết nối đến máy chủ trong một khoảng thời gian nhất định.

  • Nguyên nhân: Lỗi này có thể xuất phát từ nhiều phía. Có thể do kết nối Internet của bạn không ổn định, tường lửa (firewall) chặn kết nối, tên miền (domain) không thể phân giải, hoặc máy chủ đích đang bị quá tải hoặc không hoạt động.
  • Cách khắc phục:
  1. Kiểm tra kết nối mạng cơ bản: Thử ping example.com để xem máy chủ có phản hồi hay không.
  2. Tăng thời gian chờ: Mặc định, curl có thể hết thời gian chờ (timeout) nếu máy chủ phản hồi quá chậm. Bạn có thể sử dụng tùy chọn --connect-timeout để tăng thời gian chờ cho việc thiết lập kết nối. Ví dụ: curl --connect-timeout 30 https://slow-server.com sẽ cho phép curl chờ 30 giây để kết nối.
  3. Kiểm tra Proxy/Firewall: Đảm bảo rằng không có proxy hoặc tường lửa nào đang chặn yêu cầu của bạn đến địa chỉ đích.

Hình minh họa

Lỗi xác thực và quyền truy cập

Nhóm lỗi này xảy ra khi bạn cố gắng truy cập một tài nguyên được bảo vệ mà không cung cấp thông tin xác thực hợp lệ. Bạn thường sẽ nhận được các mã trạng thái như 401 Unauthorized hoặc 403 Forbidden.

  • Nguyên nhân: Lỗi này xảy ra khi bạn quên cung cấp thông tin đăng nhập, sử dụng sai username/password, hoặc mã thông báo (token) API đã hết hạn hoặc không hợp lệ.
  • Cách khắc phục:
  1. Sử dụng tùy chọn -u: Đối với xác thực cơ bản (Basic Auth), hãy đảm bảo bạn đã cung cấp đúng thông tin với tùy chọn -u username:password.
  2. Thêm Header Authorization: Đối với các API hiện đại sử dụng token (ví dụ: OAuth2, JWT), bạn cần gửi token trong header Authorization. Ví dụ: curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" https://api.example.com/data. Hãy kiểm tra kỹ xem token của bạn có còn hợp lệ hay không.
  3. Kiểm tra quyền: Đôi khi, dù đã xác thực thành công, bạn vẫn gặp lỗi 403 Forbidden. Điều này có nghĩa là tài khoản của bạn không có quyền truy cập vào tài nguyên cụ thể đó. Hãy kiểm tra lại quyền hạn của tài khoản trên hệ thống đích.

Best Practices khi dùng curl

Để sử dụng curl một cách hiệu quả, an toàn và chuyên nghiệp, bạn nên tuân thủ một số nguyên tắc thực hành tốt nhất. Những mẹo này sẽ giúp các lệnh và script của bạn trở nên đáng tin cậy và dễ bảo trì hơn.

  • Luôn chỉ định rõ Content-Type khi gửi dữ liệu: Khi bạn gửi dữ liệu bằng yêu cầu POST hoặc PUT, máy chủ cần biết định dạng của dữ liệu đó là gì (ví dụ: application/json hay application/x-www-form-urlencoded). Hãy luôn sử dụng tùy chọn -H "Content-Type: <kiểu_dữ_liệu>" để tránh các lỗi phân tích cú pháp không mong muốn ở phía máy chủ.
  • Sử dụng tùy chọn -L để tự động theo chuyển hướng: Rất nhiều URL, đặc biệt là các liên kết rút gọn hoặc các trang tự động chuyển từ HTTP sang HTTPS, sử dụng mã trạng thái 3xx để chuyển hướng. Thêm tùy chọn -L vào lệnh curl của bạn đảm bảo rằng nó sẽ tự động đi theo các liên kết này đến đích cuối cùng, tránh bị dừng lại giữa chừng.
  • Không để lộ thông tin nhạy cảm trong lịch sử lệnh: Khi bạn sử dụng tùy chọn -u user:password trực tiếp trên dòng lệnh, thông tin này có thể bị lưu lại trong tệp lịch sử của shell (ví dụ: .bash_history). Điều này tạo ra một rủi ro bảo mật lớn. Thay vào đó, hãy sử dụng các phương pháp an toàn hơn như đọc thông tin từ file hoặc sử dụng biến môi trường, đặc biệt là trong các script tự động.
  • Sử dụng chế độ “im lặng” (-s) trong script: Khi chạy curl trong một script tự động hóa, bạn thường không muốn thanh tiến trình hoặc các thông tin chẩn đoán hiển thị ra màn hình. Sử dụng tùy chọn -s (silent) sẽ ẩn các thông tin này, giúp đầu ra của script gọn gàng hơn, chỉ chứa dữ liệu mà bạn thực sự cần.
  • Kiểm thử lệnh curl kỹ lưỡng trước khi đưa vào script: Trước khi tích hợp một lệnh curl phức tạp vào một quy trình tự động quan trọng (như cron job), hãy chạy thử nó nhiều lần trên dòng lệnh để đảm bảo nó hoạt động đúng như mong đợi trong mọi trường hợp (thành công, thất bại, timeout,…).

Hình minh họa

Kết luận

Qua bài viết này, chúng ta đã cùng nhau khám phá một hành trình toàn diện về curl. Từ định nghĩa cơ bản “curl là gì” cho đến cách sử dụng linh hoạt trong các tình huống thực tế, rõ ràng đây không chỉ là một công cụ dòng lệnh đơn thuần. Curl thực sự là một trợ thủ đắc lực, một con dao đa năng không thể thiếu cho bất kỳ ai làm việc trong lĩnh vực công nghệ, từ lập trình viên, kỹ sư DevOps cho đến quản trị viên hệ thống. Khả năng hỗ trợ đa giao thức, tính linh hoạt trong tùy chỉnh yêu cầu, và sự tiện lợi khi tích hợp vào các kịch bản tự động hóa đã làm cho curl trở thành một tiêu chuẩn vàng trong giao tiếp mạng.

AZWEB khuyến khích bạn hãy bắt đầu thực hành và áp dụng curl vào công việc hàng ngày của mình. Đừng ngần ngại thử nghiệm với các tùy chọn khác nhau, tương tác với các API công khai, hay tự động hóa những tác vụ lặp đi lặp lại. Việc thành thạo curl không chỉ giúp bạn giải quyết công việc nhanh hơn mà còn mở ra một tầm hiểu biết sâu sắc hơn về cách thế giới web hoạt động.

Để tiếp tục phát triển kỹ năng, bạn có thể tìm hiểu sâu hơn về các công cụ tương tự có giao diện đồ họa như Postman để so sánh, hoặc bắt đầu kết hợp curl vào các bash script phức tạp hơn để xây dựng những hệ thống tự động hóa mạnh mẽ cho riêng mình.

Đánh giá