Lệnh curl là một công cụ dòng lệnh linh hoạt và mạnh mẽ, được sử dụng để truyền dữ liệu đến hoặc từ một máy chủ. Công cụ này hỗ trợ nhiều giao thức khác nhau như HTTP, HTTPS, FTP, FTPS, SCP, SFTP,… và thường được dùng để kiểm thử API, tải file hoặc mô phỏng các yêu cầu trình duyệt. Với cá nhân mình, việc thành thạo lệnh curl trên Linux gần như là kỹ năng bắt buộc nếu bạn muốn làm việc với hệ thống một cách chuyên nghiệp và kiểm soát tốt mọi luồng dữ liệu ra – vào server. Trong bài viết dưới đây, mình sẽ hướng dẫn bạn chi tiết cách sử dụng lệnh curl với các tùy chọn phổ biến, giúp bạn thao tác với dữ liệu trên Internet một cách hiệu quả từ Terminal.
Những điểm chính
- Quan điểm của mình: Việc thành thạo lệnh curl giúp bạn thao tác với dữ liệu nhanh chóng và là giải pháp để gỡ lỗi hệ thống, kiểm thử API chuẩn xác, giúp quy trình làm việc trở nên chuyên nghiệp và linh hoạt hơn.
- Khái niệm: Nắm được bản chất lệnh curl giúp truyền tải dữ liệu giữa máy chủ và máy khách linh hoạt qua Terminal.
- Lợi ích khi sử dụng: Biết cách tận dụng curl để kiểm thử API, tự động hóa Script và giả lập các yêu cầu trình duyệt phức tạp.
- Cách cài đặt: Làm chủ các bước cài đặt curl trên Debian/Ubuntu và CentOS/RHEL chỉ với vài câu lệnh đơn giản.
- Cách sử dụng chi tiết: Thành thạo các thao tác xem nội dung URL, tải file, theo dõi chuyển hướng và quản lý Header phản hồi.
- Kiểm tra kết quả: Biết cách xác định trạng thái 200 OK và kiểm tra tính chính xác của dữ liệu sau khi thực thi lệnh.
- Xử lý lỗi phổ biến: Trang bị kỹ năng khắc phục các lỗi kết nối thường gặp như sai DNS, từ chối kết nối hoặc lỗi xác thực 401/403.
- Lưu ý khi dùng: Nắm vững các quy tắc an toàn về bảo mật SSL, bảo vệ thông tin đăng nhập và cách gỡ lỗi hiệu quả với chế độ Verbose.
- Câu hỏi thường gặp: Giải đáp các thắc mắc thường gặp liên quan đến lệnh curl Linux.
Lệnh curl Linux là gì?
Lệnh cURL là lệnh được xây dựng dựa trên nền tảng thư viện libcurl, chuyên dùng để truyền tải dữ liệu giữa máy chủ và máy khách. Điểm mạnh của curl so với trình duyệt web thông thường là khả năng hoạt động hoàn toàn trong môi trường dòng lệnh, cho phép người dùng gửi các yêu cầu HTTP/HTTPS phức tạp như POST, PUT, DELETE hay tùy biến Header một cách linh hoạt. Nhờ đặc tính này, curl trở thành công cụ hữu ích của các nhà phát triển và quản trị viên hệ thống trong việc kiểm tra API, gỡ lỗi kết nối mạng hoặc viết kịch bản để tự động hóa quy trình trao đổi dữ liệu.

Những lợi ích khi sử dụng lệnh curl
Dưới đây là những lợi ích chính của lệnh curl đối với các lập trình viên và quản trị trị viên hệ thống:
- Công cụ hỗ trợ tốt trong kiểm thử và gỡ lỗi API: Lệnh curl cho phép bạn gửi các yêu cầu HTTP phức tạp như POST, PUT, DELETE,… kèm theo dữ liệu JSON hoặc XML để kiểm tra phản hồi của Server. Lệnh này giúp hiển thị chi tiết các HTTP Header, mã trạng thái và luồng dữ liệu, giúp lập trình viên nhanh chóng tìm ra lỗi trong quá trình phát triển Backend hoặc tích hợp hệ thống.
- Hỗ trợ đa dạng các giao thức truyền tải: Ngoài HTTP/HTTPS, curl cũng hỗ trợ giao thức khác như FTP, FTPS, SCP, SFTP, TFTP, LDAP và SMTP, giúp bạn có thể dùng một công cụ duy nhất cho nhiều mục đích quản trị mạng khác nhau.
- Khả năng tự động hóa mạnh mẽ: Được thiết kế để hoạt động không cần tương tác người dùng, curl có thể nhúng vào các Shell Script, Cron Job hoặc quy trình CI/CD.
- Tùy biến yêu cầu linh hoạt: curl cho phép bạn can thiệp sâu vào gói tin gửi đi. Bạn có thể giả lập trình duyệt, quản lý Cookies, đặt giới hạn tốc độ tải hoặc bỏ qua kiểm tra chứng chỉ SSL. Đây là những tính năng mà trình duyệt web thông thường rất khó thực hiện.
- Tính sẵn có và tương thích cao: curl được cài đặt sẵn trên hầu hết các bản phân phối Linux, macOS và cả Windows 10/11 trở về sau. Tính ổn định và đa nền tảng của curl giúp các giải pháp sử dụng curl có thể chạy trơn tru ở mọi môi trường mà không cần cài đặt thêm phần mềm phụ thuộc.

Cách cài đặt lệnh curl trong Linux
Lệnh curl thường được cài đặt sẵn trên hầu hết các bản phân phối Linux. Nếu lệnh không có sẵn khiến hệ thống báo lỗi command not found, bạn có thể cài đặt bằng lệnh sau:
- Trên Debian/Ubuntu:
sudo apt install curl- Trên CentOS/RHEL:
sudo yum install curlCách sử dụng lệnh curl Linux chi tiết
1. Xem nội dung của một URL
Để gửi một yêu cầu GET đơn giản để lấy nội dung HTML của website hoặc API, bạn sử dụng cú pháp lệnh sau:
curl <URL_hoac_ten_mien>Để gửi một yêu cầu HTTP GET đến website vietnix.vn và in nội dung HTML của trang đó trực tiếp ra màn hình Terminal, bạn thực thi lệnh sau:
curl vietnix.vnTheo mặc định, curl sẽ thực hiện yêu cầu GET và in toàn bộ nội dung phản hồi ra màn hình Terminal.

2. Tải file xuống
Để tải một file từ URL xuống thư mục hiện tại, bạn dùng lệnh sau:
curl -O <URL_den_file_can_tai_xuong>Để tải file techtest.index từ server về máy và lưu lại với đúng tên file gốc trong thư mục hiện tại, bạn thực hiện lệnh dưới đây:
curl -O https://tech1.vietnix.tech/techtest.index
Lưu ý
Tùy chọn -O là chữ O viết hoa.

Tùy chọn -O sẽ lưu file bằng tên gốc của chính file đó vào thư mục làm việc hiện tại.
3. Chỉ hiển thị Header phản hồi
Bạn có thể kiểm tra các thông tin metadata của phản hồi như mã trạng thái HTTP (Status Code), loại nội dung (Content-Type) và ngày giờ mà không hiển thị nội dung trang. Để xem riêng phần Header, bạn sử dụng lệnh dưới đây:
curl -I <ten_mien_hoac_URL>Bạn chạy lệnh sau để gửi một yêu cầu HTTP đến vietnix.vn nhưng chỉ lấy phần Header của phản hồi, không tải nội dung HTML/body của trang:
curl -I vietnix.vn
Lưu ý
Tùy chọn -I là chữ I viết hoa.

Tùy chọn -I sẽ chỉ hiển thị Header của phản hồi, tính năng này rất cần thiết khi bạn gỡ lỗi hoặc kiểm tra mã trạng thái HTTP, ví dụ như 200 OK, 301 Redirect, 404 Not Found.
4. Hiển thị cả Header và Body
Để hiển thị chi tiết phần Header và nội dung (Body) của phản hồi, bạn dùng lệnh sau đây:
curl -i <ten_mien_hoac_URL>Lệnh sau dùng để gửi yêu cầu đến vietnix.vn và hiển thị cả phần Header lẫn phần Body của phản hồi HTTP trong Terminal:
curl -i vietnix.vn
Lưu ý
Tùy chọn -i là chữ i viết thường.

5. Theo dõi các bước chuyển hướng
Để tự động theo dõi và hiển thị kết quả cuối cùng khi máy chủ phản hồi bằng mã chuyển hướng như 301, 302,… bạn dùng lệnh sau:
curl -L <URL>Bạn có thể thực hiện lệnh sau để gửi yêu cầu đến URL https://tech.vietnix.xyz và tự động follow tất cả các redirect cho đến URL cuối cùng, rồi in nội dung phản hồi ra Terminal:
curl -L https://tech.vietnix.xyz
Cách kiểm tra kết quả thành công
Để kiểm tra, bạn thực hiện theo 2 thao tác sau:
- Thao tác tải xuống: Bạn hãy kiểm tra thư mục hiện tại để xem file đã được tải xuống với tên và kích thước chính xác hay chưa.
- Thao tác API/GET:
- Nếu dùng
-I, kiểm tra mã trạng thái phải là200 OKhoặc3xxnếu có chuyển hướng. - Nội dung Body phải trả về dữ liệu mong muốn như HTML, JSON, XML,…
- Nếu dùng
Cách xử lý lỗi phổ biến khi sử dụng lệnh curl
1. Lỗi: curl: (6) Could not resolve host
Theo kinh nghiệm của mình, đây là lỗi mà người mới gặp phải nhiều nhất khi bắt đầu làm quen với curl và phần lớn trường hợp chỉ đơn giản là do gõ sai tên miền hoặc quên kiểm tra kết nối mạng trước khi chạy lệnh.
Dấu hiệu nhận biết lỗi: curl: (6) Could not resolve host là khi bạn gõ lệnh nhưng hệ thống trả về ngay lập tức thông báo không thể tìm thấy máy chủ. Đây là lỗi liên quan đến DNS khiến máy tính của bạn không thể dịch tên miền sang địa chỉ IP để thiết lập kết nối. Nguyên nhân có thể do mất mạng, gõ sai tên miền hoặc DNS server cấu hình sai. Để khắc phục, bạn thực thi theo các bước sau:
- Bước 1: Bạn kiểm tra lại chính tả của URL xem có thừa/thiếu ký tự nào không.
- Bước 2: Tiếp theo, bạn kiểm tra kết nối mạng bằng lệnh
ping google.com. - Bước 3: Cuối cùng, bạn kiểm tra file cấu hình DNS
/etc/resolv.confvà đảm bảo file này có chứa nameserver hợp lệ.
2. Lỗi: curl: (7) Failed to connect to host port 80: Connection refused
Nguyên nhân phổ biến của lỗi này là gói tin đã đến được máy chủ đích nhưng kết nối bị từ chối ngay tại đó, không được phép thiết lập phiên làm việc. Có hai nhóm nguyên nhân chính là:
- Dịch vụ chưa chạy: Web Server trên máy đích bị tắt hoặc bị lỗi.
- Firewall chặn: Tường lửa đang chặn cổng 80 hoặc 443.
Để khắc phục, bạn thực hiện như sau:
- Nếu là server của bạn: Bạn hãy SSH vào và kiểm tra trạng thái dịch vụ bằng lệnh
systemctl status nginxhoặc apache2. - Kiểm tra tường lửa: Đảm bảo cổng cần kết nối đã được mở.
3. Lỗi: HTTP Status Code 401 hoặc 403
Lỗi này xảy ra khi kết nối thành công, server có phản hồi, nhưng không trả về dữ liệu mà trả về mã lỗi. Nguyên nhân chính của lỗi thường do bạn chưa đăng nhập hoặc Token/Mật khẩu bị sai. Ngoài ra cũng có thể là do bạn đã đăng nhập đúng, nhưng tài khoản của bạn không có quyền truy cập vào tài nguyên này. Để khắc phục, bạn thực hiện như sau:
- Kiểm tra lại khóa API hoặc Bearer Token trong phần Header.
- Nếu dùng Basic Auth, hãy chắc chắn bạn đã dùng đúng cú pháp
-u username:password.

Những lưu ý khi sử dụng lệnh curl trong Linux
Dưới đây là những lưu ý quan trọng khi sử dụng lệnh curl để đảm bảo an toàn bảo mật và tránh các lỗi kỹ thuật không đáng có, được trình bày súc tích:
- Cẩn trọng khi bỏ qua kiểm tra SSL: Nhiều người dùng có thói quen dùng tùy chọn
-kđể bỏ qua lỗi chứng chỉ SSL khi test server nội bộ. Tuy nhiên, bạn không nên dùng cờ này trong môi trường Production hoặc khi truyền tải dữ liệu quan trọng vì điều này có thể khiến kết nối của bạn dễ bị tấn công Man-in-the-Middle. - Lưu ý về việc chuyển hướng: Khác với trình duyệt web tự động chuyển sang trang mới,
curlmặc định sẽ đứng yên nếu gặp mã phản hồi chuyển hướng như 301 hoặc 302. Do đó, bạn bắt buộc phải thêm tùy chọn-L(Location) để yêu cầucurlđi theo đường dẫn mới đến đích cuối cùng. - Bảo vệ thông tin đăng nhập: Bạn nên hạn chế việc nhập trực tiếp mật khẩu vào dòng lệnh theo dạng
curl -u user:passwordvì lệnh này sẽ được lưu lại trong lịch sử hệ thống khiến người khác có thể xem được mật khẩu của bạn. Thay vào đó, bạn chỉ nên dùng-u userđểcurlhiển thị lời nhắc nhập mật khẩu an toàn hơn. - Sử dụng chế độ Verbose (
-v) để kiểm tra: Khi kết nối thất bại và hiển thị thông báo lỗi, bạn hãy thêm tùy chọn-v(verbose) để hiển thị toàn bộ quá trình bắt tay, các HTTP Header gửi đi và nhận về, giúp bạn xác định được nguyên nhân lỗi. - Tránh làm lỗi giao diện Terminal: Nếu bạn dùng
curlđể tải một file nhị phân mà quên dùng tùy chọn lưu file,curlsẽ in nội dung mã hóa ra màn hình và điều này có thể làm treo hoặc lỗi hiển thị của cửa sổ Terminal. Do đó bạn hãy định hướng đầu ra vào file khi tải dữ liệu không phải văn bản.

Câu hỏi thường gặp
Sự khác biệt giữa tùy chọn -o (chữ thường) và -O (chữ hoa) là gì?
Điểm khác biệt chính giữa -o (chữ thường) và -O (chữ hoa) là:
-O (Remote Name): Lưu file với tên gốc giống trên server.
-o (Output File): Cho phép bạn đổi tên file khi lưu về máy.
Lệnh curl và lệnh wget khác nhau như thế nào?
– wget: Chuyên dụng để tải file, hỗ trợ tải đệ quy, hoạt động tốt khi mạng yếu và dễ sử dụng cho việc download đơn thuần.
– curl: Đa năng hơn, hỗ trợ nhiều giao thức và phương thức HTTP và được dùng chủ yếu để kiểm thử API, debug mạng và truyền dữ liệu phức tạp.
Làm sao để bỏ qua lỗi kiểm tra chứng chỉ SSL?
Khi bạn làm việc với server sử dụng Self-signed Certificate hoặc server nội bộ, curl sẽ báo lỗi bảo mật. Để bỏ qua bước kiểm tra này, hãy thêm tùy chọn -k hoặc –insecure.
Ví dụ: curl -k https://localhost
Lệnh curl là công cụ không thể thiếu đối với bất kỳ ai làm việc với mạng và web services trên Linux. Bằng cách nắm vững các tùy chọn quan trọng như tải tập tin (-o, -O), chỉ định phương thức (-X), thêm dữ liệu (-d) và quản lý Header (-H, -I), bạn đã trang bị cho mình khả năng kiểm thử kết nối và tương tác với các giao thức mạng một cách mạnh mẽ, chi tiết và an toàn ngay từ dòng lệnh.




