Cách thực hiện yêu cầu PUT với curl_init() như thế nào?

Sử dụng hàm curl_init() để xây dựng một tải dữ liệu và đảm bảo việc truyền tải dữ liệu an toàn cho các yêu cầu PUT của bạn.

Minh Triết

Minh Triết

3 tháng 6 2025

Cách thực hiện yêu cầu PUT với curl_init() như thế nào?

Ứng dụng phần mềm cURL, chính thức được biết đến với tên gọi "Client for URLs," cung cấp cho các nhà phát triển một bộ công cụ mạnh mẽ để quản lý việc truyền tải dữ liệu. Nó hoạt động trong hai chế độ khác nhau: một giao diện dòng lệnh thân thiện với người dùng phục vụ cho các tương tác cơ bản và một thư viện mạnh mẽ được thiết kế để tích hợp liền mạch vào các dự án lập trình.

💡
Hãy bắt đầu làm việc trên các API lệnh cURL của bạn với Apidog, giải pháp một cửa cho tất cả các vấn đề API. Với Apidog, bạn có thể xây dựng, gỡ lỗi, giả lập và tài liệu hóa các API cURL một cách nhanh chóng!

Để hiểu rõ hơn về Apidog, hãy tự mình thử nghiệm bằng cách nhấp vào nút dưới đây!
button

Định nghĩa chính thức của curl_init()

Dựa trên trang web chính thức của PHP, hàm curl_init khởi tạo một phiên cURL và trả về một tay cầm cURL để sử dụng với các hàm curl_setopt(), curl_exec() và curl_close().

Các tham số liên quan

url

Nếu bạn cung cấp một URL, tùy chọn CURLOPT_URL sẽ được thiết lập thành giá trị của nó. Bạn cũng có thể đặt tùy chọn này bằng tay sử dụng hàm curl_setopt().

Tuy nhiên, hãy lưu ý rằng giao thức file bị cURL tự động vô hiệu hóa nếu open_basedir đã được thiết lập.

Giá trị trả về

Hàm curl_init() trả về một tay cầm cURL khi thành công, và false khi có lỗi.

PUT Request là gì?

PUT request trong Giao thức Chuyển giao Siêu văn bản (HTTP) hoạt động như một công cụ tinh vi để quản lý các tài nguyên trên máy chủ web. Nó khác với đối tác của nó, GET request (được sử dụng để lấy dữ liệu), bằng cách nhắm đến các sửa đổi ở phía máy chủ.

Chức năng của PUT Requests

Khác với đối tác của nó, GET request được sử dụng để lấy dữ liệu, PUT request tập trung vào việc sửa đổi thông tin ở phía máy chủ. Sự sửa đổi này có thể bao gồm hai hành động chính:

  1. Cập nhật tài nguyên hiện có: Nếu một tài nguyên (như tài khoản người dùng hoặc sản phẩm trong cơ sở dữ liệu) đã tồn tại tại một URL cụ thể, PUT request có thể được sử dụng để cập nhật dữ liệu liên quan của nó.
  2. Tạo tài nguyên mới: Trong các tình huống mà tài nguyên không tồn tại tại URL được chỉ định, PUT request có thể được sử dụng để tạo một tài nguyên mới với dữ liệu được cung cấp.

Đặt dữ liệu

Các PUT request thường truyền tải dữ liệu trong thân yêu cầu, tương tự như các POST request. Dữ liệu này thường đại diện cho trạng thái mới hoặc đã cập nhật của tài nguyên đang nhắm tới.

Tính idempotence

Một đặc điểm xác định của PUT request là tính chất idempotent của nó. Điều này có nghĩa là việc thực hiện một PUT request nhiều lần với cùng một dữ liệu sẽ tạo ra cùng một kết quả. Nói một cách đơn giản, việc gửi một PUT request một lần hoặc nhiều lần với cùng một dữ liệu đều dẫn đến cùng một kết quả trên máy chủ.

Các trường hợp sử dụng phổ biến của PUT Requests

Ví dụ mã về việc thực hiện PUT Requests với hàm curl_init()

Dưới đây là một số ví dụ mã PHP mà bạn có thể tham khảo nếu bạn muốn thực hiện PUT requests với hàm curl_init().

Ví dụ 1 - Cập nhật thông tin người dùng (Dữ liệu JSON)

Ví dụ này cập nhật thông tin hồ sơ của người dùng trên một máy chủ sử dụng dữ liệu JSON.

<?php

$url = "https://www.example.com/api/users/123"; // Thay thế bằng ID người dùng thực tế
$new_email = "new_email@example.com";

$data = array(
  "email" => $new_email
);

$data_json = json_encode($data);

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); // Đặt phương thức yêu cầu là PUT
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_json); // Đặt dữ liệu PUT dưới dạng JSON
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  // Trả về phản hồi

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  'Content-Type: application/json',   // Đặt loại nội dung là JSON
  'Authorization: Bearer YOUR_API_KEY'  // Thêm tiêu đề xác thực
));

$response = curl_exec($ch);

curl_close($ch);

if($response) {
  echo "Hồ sơ người dùng đã được cập nhật thành công!";
} else {
  echo "Lỗi: " . curl_error($ch);
}

?>

Giải thích mã:

  1. Chúng tôi xác định URL mục tiêu (bao gồm ID người dùng) và địa chỉ email mới.
  2. Chúng tôi tạo một mảng $data chứa địa chỉ email đã cập nhật và chuyển đổi nó thành JSON bằng json_encode.
  3. Chúng tôi khởi tạo tay cầm cURL và đặt phương thức yêu cầu thành PUT bằng CURLOPT_CUSTOMREQUEST.
  4. Chúng tôi đặt dữ liệu PUT bằng CURLOPT_POSTFIELDS và thiết lập tiêu đề loại nội dung là JSON.
  5. Chúng tôi thêm tiêu đề xác thực với khóa API của bạn để truy cập an toàn.
  6. Chúng tôi thực hiện yêu cầu, đóng tay cầm và kiểm tra phản hồi xem có thành công hay không.

Ví dụ 2 - Tải lên tệp (Dữ liệu thô)

Ví dụ này tải lên một tệp đến một máy chủ sử dụng dữ liệu thô.

<?php

$url = "https://www.example.com/api/uploads";
$filename = "myfile.txt";

$file_content = file_get_contents($filename); // Đọc nội dung tệp

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); // Đặt phương thức yêu cầu là PUT
curl_setopt($ch, CURLOPT_PUT, 1);  // Đặt chế độ tải lên PUT

curl_setopt($ch, CURLOPT_INFILE, fopen($filename, "rb")); // Đặt tệp để tải lên
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($filename)); // Đặt kích thước tệp

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  // Trả về phản hồi

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  'Content-Type: application/octet-stream' // Đặt loại nội dung cho dữ liệu thô
));

$response = curl_exec($ch);

curl_close($ch);

if($response) {
  echo "Tệp đã được tải lên thành công!";
} else {
  echo "Lỗi: " . curl_error($ch);
}

?>

Giải thích mã:

  1. Chúng tôi xác định URL tải lên và tên tệp.
  2. Chúng tôi đọc nội dung tệp bằng file_get_contents.
  3. Chúng tôi khởi tạo tay cầm cURL và đặt phương thức yêu cầu là PUT.
  4. Chúng tôi kích hoạt chế độ tải lên PUT với CURLOPT_PUT.
  5. Chúng tôi chỉ định tệp để tải lên bằng CURLOPT_INFILE và kích thước của nó bằng CURLOPT_INFILESIZE.
  6. Chúng tôi đặt tiêu đề loại nội dung để chỉ ra dữ liệu thô.
  7. Chúng tôi thực hiện yêu cầu, đóng tay cầm và kiểm tra phản hồi xem có thành công hay không.

Ví dụ 3 - PUT có điều kiện với ETag

Ví dụ này minh họa một yêu cầu PUT có điều kiện sử dụng ETag cho khóa lạc quan.

<?php

$url = "https://www.example.com/api/posts/123";
$new_title = "Tiêu đề cập nhật";
$etag = "some-etag-value";  // Thay thế bằng ETag thực tế

$data = array(
  "title" => $new_title
);

$data_json = json_encode($data);

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); // Đặt phương thức yêu cầu là PUT
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_json); // Đặt dữ liệu PUT dưới dạng JSON
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  // Trả về phản hồi

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  'Content-Type: application/json',   // Đặt loại nội dung là JSON
  'If-Match: ' . $etag  // Thêm ETag cho cập nhật có điều kiện
));

$response = curl_exec($ch);

curl_close($ch);

if($response) {
  echo "Bài viết đã được cập nhật thành công!";
} else {
  $error = curl_error($ch);
  if (strpos($error, '412 Precondition Failed') !== false) {
    echo "Cập nhật thất bại: Không trùng khớp ETag (dữ liệu có thể đã được sửa đổi bởi người dùng khác).";
  } else {
    echo "Lỗi: " . $error;
  }
}

?>

Giải thích mã:

  1. Chúng tôi xác định URL mục tiêu (ID bài viết), tiêu đề mới và ETag được truy xuất từ máy chủ.
  2. Chúng tôi tạo một mảng $data và chuyển đổi nó thành JSON.
  3. Chúng tôi đặt phương thức yêu cầu là PUT và bao gồm dữ liệu PUT.
  4. Chúng tôi thêm một tiêu đề If-Match với ETag để đảm bảo rằng cập nhật chỉ diễn ra nếu phiên bản bên máy chủ hiện tại trùng khớp với ETag. Điều này ngăn ngừa việc ghi đè các thay đổi được thực hiện bởi người dùng khác (khóa lạc quan).
  5. Chúng tôi kiểm tra phản hồi để xác nhận thành công và xử lý một lỗi cụ thể (412 Precondition Failed) cho thấy không trùng khớp ETag.

Lưu ý để nhớ

Xin vui lòng đảm bảo rằng các mẫu mã ở trên không được sao chép và dán vào IDE của bạn, vì chúng đã được đơn giản hóa và sẽ yêu cầu các sửa đổi thêm để phù hợp với nhu cầu ứng dụng của bạn.

Để xem tài liệu chính thức, bạn có thể kiểm tra tại: https://www.php.net/manual/en/book.curl.php

Thúc đẩy phát triển API cURL của bạn với Apidog

Apidog là một nền tảng phát triển API tinh vi có khả năng chuyển đổi các dòng lệnh cURL thành các hiển thị đồ họa đẹp mắt và trực quan, giúp cho các nhà phát triển dễ dàng hiểu và làm việc với các API.

thông số kỹ thuật apidog
button

Không chỉ có thể nhập các lệnh cURL, mà bạn còn có thể xây dựng, gỡ lỗi, giả lập và tài liệu hóa chúng giống như bất kỳ API nào khác! Với sự tiện lợi như vậy, Apidog có thể hỗ trợ bạn với một quy trình làm việc không bị gián đoạn.

Nhập các API cURL trong vòng vài giây

nhập cURL apidog

Apidog hỗ trợ người dùng muốn nhập các lệnh cURL vào Apidog. Trong một dự án trống, nhấp vào nút tím + ở khu vực góc trên bên trái của cửa sổ Apidog, và chọn Nhập cURL.

mẫu mã cURL stripe

Sao chép và dán lệnh cURL vào ô hiển thị trên màn hình của bạn.

nhập mã cURL thành công

Nếu thành công, bây giờ bạn sẽ có thể xem lệnh cURL dưới dạng yêu cầu API.

button

Không chắc chắn về PHP? Tạo mã với Apidog

Nếu bạn không có kinh nghiệm lập trình trước đây bằng ngôn ngữ lập trình PHP, đừng lo! Apidog có tính năng tạo mã mà bạn có thể dựa vào, cung cấp cho bạn các khung mã cho nhiều ngôn ngữ lập trình khác.

apidog tạo mã khách hàng

Đầu tiên, hãy xác định nút </> Tạo mã trên bất kỳ API hoặc yêu cầu nào và chọn Tạo mã khách hàng trong danh sách thả xuống.

apidog tạo mã PHP

Tiếp theo, chọn PHP, và tìm phần cURL. Bạn sẽ thấy mã được sinh ra cho cURL. Tất cả những gì bạn cần làm là sao chép và dán nó vào IDE (Môi trường phát triển tích hợp) của bạn và tiếp tục phát triển ứng dụng của bạn.

button

Kết luận

Bằng cách nắm vững các PUT request với curl_init(), bạn đã mở khóa một công cụ mạnh mẽ cho việc tương tác với các máy chủ web. Hàm này cho phép bạn không chỉ cập nhật các tài nguyên hiện có mà còn tạo ra những tài nguyên mới. Dù bạn đang quản lý hồ sơ người dùng, sửa đổi các mục cơ sở dữ liệu hay tải lên các tệp, các PUT request cung cấp một phương pháp chính xác và hiệu quả cho việc thao tác dữ liệu.

Hãy nhớ rằng, curl_init() cung cấp một cách tiếp cận linh hoạt, cho phép bạn chỉ định các định dạng dữ liệu, thiết lập tiêu đề tùy chỉnh để giao tiếp an toàn và thậm chí xử lý các kịch bản như cập nhật có điều kiện và báo cáo tiến độ cho các chuyển nhượng tệp lớn. Với kiến thức mới mẻ này, bạn có thể tự tin tận dụng các PUT request để nâng cao chức năng và hiệu năng của các ứng dụng web của bạn.

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API