insocks
Back to blog. Article language: BN EN ES FR HI ID PT RU UR VI ZH

Hướng dẫn sử dụng curl POST: Cách gửi yêu cầu POST chuẩn xác nhất

Curl POST request là một tiện ích dòng lệnh phổ biến để truyền dữ liệu liền mạch qua nhiều giao thức mạng khác nhau, bao gồm HTTP, HTTPS và FTP. Chương trình này đã trở thành lựa chọn tiêu chuẩn để gửi các yêu cầu HTTP từ dòng lệnh. Với khả năng hỗ trợ đa nền tảng và các giao thức HTTP, HTTPS, FTP và IMAP, việc gửi yêu cầu đến API và thu thập thông tin từ trang web trở nên dễ dàng hơn bao giờ hết. Được sử dụng rộng rãi và hỗ trợ giao thức Curl POST, đây được coi là phương pháp hợp lệ để kiểm thử API trực tiếp từ dòng lệnh, đối với cả các dịch vụ nội bộ hoặc công cộng. Tài liệu này dành cho các nhà phát triển, kỹ sư DevOps và chuyên gia QA.

Tìm hiểu về phương thức HTTP POST

Post Curl đề cập đến việc sử dụng phương thức HTTP POST để gửi dữ liệu đến máy chủ. Đây là một trong những phương thức HTTP phổ biến nhất. Khác với các yêu cầu GET (đi kèm dữ liệu trong URL), yêu cầu Curl POST truyền dữ liệu trong phần thân (body) của yêu cầu. Phương thức này có thể được sử dụng để thực hiện truyền dữ liệu ẩn và tránh các giới hạn độ dài URL mà trình duyệt áp đặt lên yêu cầu GET.

Các phương thức này được sử dụng để gửi dữ liệu biểu mẫu curl, tải tệp lên và chuyển dữ liệu JSON đến API. Vì thông tin nằm trong phần thân yêu cầu, nó không hiển thị trên URL hoặc lịch sử trình duyệt và thường không bị trình duyệt web lưu vào bộ nhớ đệm, không giống như yêu cầu GET.

Sự khác biệt giữa yêu cầu GET và Curl POST với phần thân được trình bày chi tiết hơn trong bảng dưới đây:

Tiêu chí so sánhYêu cầu GETYêu cầu POST
Vị trí dữ liệuTrong URLTrong nội dung (body) của Curl POST
Công dụng phổ biếnTìm kiếm, lọc và đọc nội dung khi dữ liệu không thay đổiỦy quyền, đăng ký, thanh toán, tạo hoặc chỉnh sửa nội dung
Tính lũy đẳng (Idempotency)Có - nhiều yêu cầu không làm thay đổi trạng tháiKhông
Cân nhắc bảo mậtÍt an toàn hơn do dữ liệu bị hiển thị công khaiAn toàn hơn do dữ liệu bị ẩn

Yêu cầu GET bị giới hạn bởi độ dài URL, trong khi yêu cầu POST thì không.

Cách curl gửi yêu cầu POST

Lệnh Curl POST cho phép bạn gửi yêu cầu HTTP trực tiếp từ dòng lệnh. Các yêu cầu này truyền dữ liệu đến máy chủ. Phần thân của Curl POST trong một yêu cầu curl có thể chứa nhiều tham số. Dạng đơn giản nhất là: curl -X POST https://example.com/api, trong đó:

curl - khởi chạy chương trình;

-X - chỉ định POST làm phương thức HTTP; https://example.com/api - URL nơi gửi yêu cầu. Ví dụ về Curl POST này không chứa dữ liệu, do đó, phần thân yêu cầu thường được thêm vào. Như vậy, curl cung cấp khả năng kiểm soát chi tiết các giao tiếp HTTP, làm cho nó trở nên thiết yếu cho việc gỡ lỗi API và kiểm thử hạ tầng.

Gửi các loại dữ liệu POST khác nhau

Nhiều loại dữ liệu được gửi trong các yêu cầu POST thông qua curl. Nội dung và định dạng tiêu đề (header) của Curl POST xác định kiểu thông tin cần gửi. Các chi tiết chính được nêu dưới đây.

Gửi dữ liệu được mã hóa biểu mẫu

Định dạng application/x-www-form-urlencoded là phương thức tiêu chuẩn để truyền dữ liệu biểu mẫu trong các yêu cầu POST qua HTTP. Các yêu cầu như vậy sử dụng biểu mẫu HTML và tiện ích curl.

Dữ liệu được truyền dưới dạng cặp key=value được ngăn cách bởi ký hiệu &. Một ví dụ về Curl POST như sau: name=Michael&age=32&city=Chicago, trong đó name là Michael, age là 32, và city là Chicago.

Gửi dữ liệu JSON

JSON là một trong những định dạng phổ biến nhất để trao đổi dữ liệu giữa khách hàng và máy chủ. Khi gửi JSON qua POST Curl, điều quan trọng là phải chỉ định đúng tiêu đề HTTP: Content-Type: application/json. Khi sử dụng tiêu đề loại nội dung, hãy đảm bảo rằng nó chính xác, vì nó cho máy chủ biết định dạng mã hóa của phần thân yêu cầu Curl POST.

Để so sánh, dưới đây là một bảng:

Loại dữ liệuYêu cầu tiêu đềTrường hợp sử dụng điển hình
application/x-www-form-urlencodedTự độngBiểu mẫu HTML
multipart/form-dataTự động qua tải tệp lên qua POSTTải tệp lên
application/jsonPhải chỉ định thủ côngREST API
application/XMLBắt buộcCác API cũ và SOAP

JSON yêu cầu cú pháp chính xác và sử dụng dấu ngoặc kép quanh các khóa.

Tải tệp lên với POST

Việc tải tệp lên qua POST Curl được thực hiện bằng cách sử dụng biểu mẫu HTML với thuộc tính enctype="multipart/form-data". Phương thức này cho phép truyền cả dữ liệu văn bản và dữ liệu nhị phân lên máy chủ để xử lý. Các đặc điểm chính bao gồm:

  • Biểu mẫu HTML: Phải bao gồm thuộc tính enctype với giá trị "multipart/form-data" để đảm bảo truyền tệp chính xác.
  • Xử lý máy chủ: Tập lệnh nhận được tệp qua một mảng đặc biệt chứa tên, loại, vị trí tạm thời và kích thước của tệp.
  • Bảo mật: Trường ẩn MAX_FILE_SIZE phải được đặt trước trường chọn tệp để xác minh sơ bộ, mặc dù điều này không thay thế xác minh phía máy chủ.

Các tệp được truyền nguyên vẹn hoặc từng phần.

Làm việc với tiêu đề và xác thực

Yêu cầu Curl POST truyền dữ liệu cùng với các tham số xác thực và siêu dữ liệu trong tiêu đề HTTP, còn payload nằm trong phần thân yêu cầu. Có một số khía cạnh quan trọng khi làm việc với tiêu đề và xác thực:

  • Ủy quyền (Authorization): Thường được sử dụng để chuyển mã thông báo truy cập: Authorization: Bearer .
  • Tiêu đề Content-Type: Bắt buộc khi gửi dữ liệu JSON.
  • Các tiêu đề quan trọng khác: Accept (loại phản hồi mong đợi) và User-Agent (thông tin máy khách).
  • Xác thực trong Postman: Trong tab Authorization, chọn Bearer Token để Postman tự động tạo tiêu đề.
  • Bảo mật: Các yêu cầu xác thực dựa trên mã thông báo luôn phải được gửi qua HTTPS.

Do đó, nên sử dụng HTTPS, lưu trữ mã thông báo an toàn và không hiển thị thông tin xác thực trong nhật ký (logs).

Sử dụng yêu cầu POST thông qua proxy

Tiện ích này hỗ trợ máy chủ proxy, cho phép bạn gửi yêu cầu thông qua một máy chủ trung gian chuyển tiếp dữ liệu đến API mục tiêu. Trong hạ tầng doanh nghiệp, proxy thường được sử dụng để:

  • Áp dụng chính sách an ninh mạng;
  • Kiểm soát truy cập và lưu lượng truy cập;
  • Kiểm thử API từ các phân đoạn và khu vực khác nhau;
  • Cân bằng tải và phân phối;
  • Truy cập tập trung vào các dịch vụ bên ngoài.

Bảng dưới đây cung cấp một sự so sánh:

Loại proxyKhi nào nên sử dụngLợi ích cho doanh nghiệp
HTTP proxyLưu lượng web và API tiêu chuẩnDễ dàng tích hợp và kiểm soát
HTTPS proxyKết nối an toànMã hóa và bảo mật
SOCKS5 proxyĐịnh tuyến lưu lượng phức tạpTính linh hoạt và hỗ trợ các giao thức khác nhau

Điều quan trọng là kiểm tra độ trễ trước khi sử dụng ở quy mô lớn, giám sát tỷ lệ thành công của các yêu cầu và cấu hình thời gian chờ (timeouts) chính xác.

Gỡ lỗi các yêu cầu POST trong curl

Khi phát triển và kiểm thử API, việc chẩn đoán các yêu cầu được tạo bằng dữ liệu Curl POST là cần thiết. Một số công cụ tích hợp sẵn cho phép bạn xem toàn bộ quá trình trao đổi mạng, tiêu đề HTTPS, mã phản hồi của máy chủ và hành vi kết nối. Dưới đây là các phương pháp chính:

  • Chế độ Verbose (-v): Hiển thị chi tiết kết nối HTTP. Đầu ra này bao gồm phân giải DNS, kết nối TCP/TLS, các tiêu đề HTTP đã gửi, nội dung yêu cầu và tiêu đề phản hồi của máy chủ. Điều này giúp hiểu chính xác yêu cầu nào đã được gửi, những tiêu đề nào máy chủ nhận được và API trả về phản hồi gì.
  • Xem tiêu đề phản hồi: Đôi khi cần xem tiêu đề phản hồi mà không cần chẩn đoán mạng chi tiết. Điều này hữu ích để kiểm tra CORS, phân tích tiêu đề Content-Type và xác thực ủy quyền.
  • Thời gian chờ (Timeouts): Đôi khi máy chủ phản hồi chậm hoặc kết nối bị treo. Curl cho phép đặt giới hạn. Điều này rất quan trọng cho các tác vụ tự động, kiểm thử tích hợp và hệ thống vi dịch vụ.
  • Thử lại (Retries): Nếu dịch vụ tạm thời không khả dụng, Curl có thể tự động thử lại yêu cầu POST. Điều này hữu ích cho các lỗi mạng tạm thời hoặc các dịch vụ không ổn định.
  • Mã trạng thái phản hồi máy chủ: Khi gỡ lỗi yêu cầu, một số mã nhất định cho biết việc thực thi thành công, và các tùy chọn giúp xác định lỗi.
Tùy chọn gỡ lỗiMục đíchKhi nào nên sử dụng
-vĐầu ra chi tiết của trao đổi mạngChẩn đoán các vấn đề API
-iHiển thị tiêu đề phản hồi HTTPPhân tích phản hồi máy chủ
-w "%{http_code}"Lấy mã trạng tháiTập lệnh tự động
--connect-timeoutGiới hạn thời gian kết nốiMạng không ổn định
--max-timeGiới hạn thời gian yêu cầuTự động hóa
--retryThử lại yêu cầuLỗi máy chủ tạm thời
--traceNhật ký mạng đầy đủChẩn đoán sâu

Tất cả các lệnh này có thể được sử dụng để gỡ lỗi toàn bộ hệ thống API.

Các chiến lược tối ưu hóa hiệu suất

Khi làm việc với các API và dịch vụ mạng, việc tối ưu hóa hiệu suất yêu cầu HTTP là rất quan trọng. Tiện ích này bao gồm một số công cụ để tăng tốc yêu cầu. Bao gồm:

  • Tái sử dụng kết nối: Thiết lập kết nối mới có thể mất hàng chục mili giây, vì vậy một kết nối có thể được tái sử dụng cho nhiều yêu cầu.
  • Yêu cầu song song: Khi gửi một lượng lớn yêu cầu POST, việc thực thi chúng song song sẽ hiệu quả hơn.
  • Cấu hình thời gian chờ: Thời gian chờ không chính xác có thể dẫn đến treo tập lệnh, chặn tài nguyên và chậm trễ kéo dài trong các sự cố mạng.
  • Nén dữ liệu: Truyền các phản hồi API lớn có thể tiêu tốn đáng kể băng thông mạng, vì vậy curl hỗ trợ nén.

Các chiến lược này mang lại những ưu điểm sau:

  • kiểm thử nhanh;
  • tự động hóa bằng tập lệnh;
  • kiểm soát chính xác.

Trong số các nhược điểm là nhu cầu về kỹ năng dòng lệnh và nguy cơ lỗi trong quá trình cấu hình thủ công.

Ví dụ từng bước về quy trình API POST an toàn

Một quy trình an toàn đảm bảo tính chính xác của dữ liệu và xử lý phản hồi đáng tin cậy. Các bước như sau:

  • Xác định điểm cuối (endpoint) API: Trước tiên, xác định URL chấp nhận yêu cầu. Ví dụ về yêu cầu Curl POST có dạng: https://api.example.com/v1/users;
  • Chuẩn bị định dạng payload dữ liệu curl: Hầu hết các API hiện đại đều chấp nhận JSON. Nó dễ chỉnh sửa, dễ kiểm tra cú pháp và thuận tiện hơn trong tự động hóa;
  • Tùy chỉnh tiêu đề trong yêu cầu: Chúng thông báo cho máy chủ về loại dữ liệu, định dạng phản hồi và các tham số yêu cầu bổ sung;
  • Thiết lập xác thực: Hầu hết các API yêu cầu nhận dạng thông qua Bearer Token;
  • Gửi yêu cầu POST: Sau tất cả các bước này, yêu cầu mong muốn có thể được thực hiện.

Tiếp theo, phản hồi có thể được kiểm tra và kết quả yêu cầu có thể được ghi nhật ký an toàn.

So sánh Curl POST với các công cụ API đồ họa

Khi làm việc với các yêu cầu API, cả công cụ dòng lệnh (CLI) và trình khách API đồ họa đều được sử dụng. Các nhà phát triển và kỹ sư DevOps thường sử dụng Curl, trong khi các công cụ đồ họa lại thuận tiện cho việc kiểm thử API.

Loại công cụTự động hóaTính linh hoạtCông dụng tốt nhất
Công cụ CLICaoRất caoTập lệnh, DevOps, CI/CD
Trình khách API GUITrung bìnhCaoKiểm thử và phát triển API

Curl đặc biệt hiệu quả trong CI/CD và tự động hóa máy chủ.

Các cân nhắc về bảo mật và tuân thủ tại Hoa Kỳ

Khi làm việc với các API và gửi yêu cầu, điều quan trọng là phải xem xét các yêu cầu về bảo mật và tuân thủ. Điều này đặc biệt quan trọng đối với hệ thống doanh nghiệp, dịch vụ y tế và nền tảng tài chính. Các cân nhắc này bao gồm:

  • lưu trữ an toàn các khóa API;
  • mã hóa và bảo vệ dữ liệu;
  • sử dụng các chính sách bảo mật của doanh nghiệp.

Ngoài ra, điều quan trọng là sử dụng API một cách hợp pháp và có trách nhiệm theo luật pháp Hoa Kỳ.

Các trường hợp sử dụng yêu cầu Curl POST trong doanh nghiệp

Có một số ví dụ về yêu cầu Curl POST được sử dụng trong môi trường doanh nghiệp. Bao gồm:

  • tự động hóa các dịch vụ nội bộ;
  • gửi dữ liệu giám sát và nhật ký;
  • tích hợp với các nền tảng đám mây;
  • làm việc với các API bên ngoài và đối tác;
  • kiểm thử và QA.

Ngoài ra, một ví dụ khác về Curl POST là tích hợp với các hệ thống kiểm soát an ninh và truy cập.

Cách giải pháp proxy của INSOCKS hỗ trợ quy trình làm việc curl

Các giải pháp proxy từ INSOCKS giúp các doanh nghiệp quản lý hiệu quả lưu lượng mạng để kiểm soát tập trung, bảo mật và cân bằng tải. Các giải pháp từ INSOCKS:

  • hỗ trợ HTTP và SOCKS;
  • có hạ tầng ổn định;
  • có các nhóm IP có thể mở rộng;
  • có cấu hình linh hoạt.
Chức năngƯu điểm của INSOCKS cho người dùng curl
Proxy HTTP và SOCKSĐịnh tuyến tất cả các yêu cầu qua một proxy tập trung
Định tuyến nút (Node routing)Khả năng kiểm thử API trên các phân đoạn mạng và khu vực khác nhau
Cân bằng tảiPhân phối các yêu cầu qua nhiều điểm đầu ra
Tự động hóaTích hợp hoàn toàn với các tập lệnh curl và CI/CD

Các proxy ghi lại nhật ký tất cả các yêu cầu và phản hồi để đảm bảo tuân thủ mọi yêu cầu.

Các câu hỏi thường gặp

Sự khác biệt giữa -d và --data-binary trong Curl là gì?

Tùy chọn đầu tiên gửi dữ liệu trong phần thân yêu cầu, trong khi tùy chọn thứ hai gửi dữ liệu như nguyên bản mà không sửa đổi.

Làm thế nào để gửi JSON với yêu cầu POST?

Bạn cần chuẩn bị một tệp payload JSON, thiết lập tiêu đề phù hợp và gửi dữ liệu bằng các thuộc tính yêu cầu.

Yêu cầu Curl POST có thể sử dụng mã thông báo xác thực không?

Có. Các mã thông báo xác thực có thể được sử dụng trong các yêu cầu như vậy.

Curl có phù hợp để tự động hóa doanh nghiệp không?

Có. Tiện ích này phù hợp để tự động hóa trong môi trường doanh nghiệp.

Curl có thể hoạt động với các proxy không?

Có. Tiện ích này hoạt động tốt với các máy chủ proxy.

2026-03-18