如何使用curl_init() 发送 PUT请求?详细教程!

利用curl_init() 函数构建数据有效负载并确保PUT 请求的安全数据传输,一起来看看如何实现吧!

用 Apifox,节省研发团队的每一分钟

如何使用curl_init() 发送 PUT请求?详细教程!

免费使用 Apifox

相关推荐

最新文章

API

一体化协作平台

API 设计

API 文档

API 调试

自动化测试

API Mock

API Hub

立即体验 Apifox
目录

软件应用程序 cURL(Client for URLs)为开发人员提供了用于管理数据传输的强大工具包,有两种不同的模式运行:

  • 用户友好的命令行界面,可满足基本交互的需要;
  • 功能强大的库,旨在无缝集成到编程项目中。
🦊
使用 Apifox 处理 cURL 命令 API 会是非常好的一站式解决方案,可以立即构建、调试、模拟和记录 cURL API!
Apifox - API 文档、调试、Mock、测试一体化协作平台。拥有接口文档管理、接口调试、Mock、自动化测试等功能,接口开发、测试、联调效率,提升 10 倍。最好用的接口文档管理工具,接口自动化测试工具。
Apifox = Postman + Swagger + Mock + JMeter。集接口文档工具、接口Mock工具、接口自动化测试工具、接口调试工具于一体,提升 10 倍研发效率。是最好用的API文档工具,API自动化测试工具,API Mock工具,接口文档管理工具,接口文档生成工具。

curl_init()的定义

根据 PHP 官方网站,curl_init 函数初始化一个 cURL 会话,并返回一个 cURL 句柄,以便与 curl_setopt()、curl_exec() 和 curl_close() 函数一起使用。

涉及参数

URL

如果提供 URL, CURLOPT_URL 选项将设置为其值,还可以使用 curl_setopt()函数手动设置此选项。

但如果设置了 open_basedir ,则 cURL 本身会禁用 file 协议。

返回值

如果成功,curl_init() 函数会返回一个 cURL 句柄,如果出现错误,则返回 false

什么是 PUT 请求?

HTTP 中的 PUT 请求充当管理 Web 服务器上资源的精细工具,与对应的 GET 请求(用于数据检索)不同,专门针对服务器端的修改。

PUT 请求方法

与用于检索数据的 GET 请求不同,PUT 请求侧重于修改服务器端的信息,包含两个主要操作:

  1. 更新现有资源:如果某个资源(例如用户帐户或数据库中的产品)已存在于特定 URL,则可以使用 PUT 请求来更新其关联数据。
  2. 创建新资源:在指定 URL 不存在资源的情况下,可以使用 PUT 请求使用提供的数据创建新资源。

数据放置

PUT 请求通常在请求正文中传输数据,类似于 POST 请求。该数据通常表示目标资源的新状态或更新状态。

幂等性

PUT 请求的一个定义特征是其幂等性质,意味着使用相同的数据多次执行 PUT 请求将产生相同的结果。简单来说,使用相同的数据发送一次或多次 PUT 请求会在服务器上产生相同的结果。

PUT 请求的常见用例

  • 更新用户配置文件或帐户信息
  • 修改数据库中的现有内容(如修改文章内容等)
  • 将新文件上传到服务器上的特定位置

curl_init() PUT 请求的代码示例

如果要了解如何使用 curl_init() 函数发出 PUT 请求,可以参考以下一些 PHP 编码示例:

示例 1:更新用户信息(JSON 数据)

使用 JSON 数据更新服务器上的用户个人资料信息:

<?php

$url = "https://www.example.com/api/users/123"; // Replace with actual user ID
$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"); // Set request method to PUT
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_json); // Set PUT data as JSON
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  // Return the response

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  'Content-Type: application/json',   // Set content type to JSON
  'Authorization: Bearer YOUR_API_KEY'  // Add authorization header
));

$response = curl_exec($ch);

curl_close($ch);

if($response) {
  echo "User profile updated successfully!";
} else {
  echo "Error: " . curl_error($ch);
}

?>

代码解读:

  1. 定义目标 URL(包括用户 ID)和新 email 地址。
  2. 创建一个包含更新后的 email 的 $data 数组,并使用 json_encode 将其转换为 JSON。
  3. 初始化 curl 句柄并使用 CURLOPT_CUSTOMREQUEST 将请求方法设置为PUT。
  4. 使用 CURLOPT_POSTFIELDS 设置 PUT 数据,并将内容类型标头设置为 JSON。
  5. 使用 API 密钥添加授权 Header 以实现安全访问。
  6. 执行请求,关闭句柄,并检查是否有成功的响应。

示例2:上传文件(原始数据)

使用原始数据将文件上传到服务器:

<?php

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

$file_content = file_get_contents($filename); // Read file contents

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); // Set request method to PUT
curl_setopt($ch, CURLOPT_PUT, 1);  // Set PUT upload mode

curl_setopt($ch, CURLOPT_INFILE, fopen($filename, "rb")); // Set file for upload
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($filename)); // Set file size

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  // Return the response

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  'Content-Type: application/octet-stream' // Set content type for raw data
));

$response = curl_exec($ch);

curl_close($ch);

if($response) {
  echo "File uploaded successfully!";
} else {
  echo "Error: " . curl_error($ch);
}

?>

代码解读:

  1. 定义上传 URL 和文件名。
  2. 使用 file_get_contents 读取文件内容。
  3. 初始化 curl 句柄并将请求方法设置为PUT。
  4. 使用 CURLOPT_PUT 启用 PUT 上传模式。
  5. 使用 CURLOPT_INFILE 指定要上传的文件,并使用 CURLOPT_INFILESIZE 指定文件大小。
  6. 设置内容类型标头来指示原始数据。
  7. 执行请求,关闭句柄,并检查是否有成功的响应。

示例3:使用 ETag 的条件 PUT

<?php

$url = "https://www.example.com/api/posts/123";
$new_title = "Updated Title";
$etag = "some-etag-value";  // Replace with actual ETag

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

$data_json = json_encode($data);

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); // Set request method to PUT
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_json); // Set PUT data as JSON
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  // Return the response

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  'Content-Type: application/json',   // Set content type to JSON
  'If-Match: ' . $etag  // Add ETag for conditional update
));

$response = curl_exec($ch);

curl_close($ch);

if($response) {
  echo "Post updated successfully!";
} else {
  $error = curl_error($ch);
  if (strpos($error, '412 Precondition Failed') !== false) {
    echo "Update failed: ETag mismatch (data may have been modified by another user).";
  } else {
    echo "Error: " . $error;
  }
}

?>

代码解读:

  1. 定义目标 URL(帖子 ID)、新标题以及从服务器检索的 ETag。
  2. 创建一个 $data 数组并将其转换为 JSON。
  3. 将请求方法设置为 PUT 并包含 PUT 数据。
  4. 添加带有 ETag 的 If-Match 标头,以确保仅当当前服务器端版本与 ETag 匹配时才会发生更新,防止覆盖其他用户所做的更改(乐观锁定)。
  5. 检查响应是否成功并处理指示 ETag 不匹配的特定错误(412 Precondition Failed)。

注意事项

上面的代码示例不能直接复制粘贴到 IDE 中,因为这是经过简化的版本,需要进一步修改才能满足实际的应用程序使用需求。

自的 IDE 中进行所需的修改! 对于官方文档,可以查看:

PHP: cURL - Manual

用 Apifox 轻松使用 cURL 文件

Apifox 是一体化 API 开发平台,能够将 cURL 命令行转换为美观直观的图形显示,使开发人员更容易理解和使用 API。

用 Apifox 轻松使用 cURL 文件

不仅可以导入 cURL 命令,还可以对任何 API 进行构建、调试、模拟和记录,超级便利,Apifox 可以为我们提供不间断的工作流程。

快速将 cURL 命令导入 Apifox

要将 cURL 命令导入 Apifox,首先在项目中,单击 Apifox 窗口左上角的紫色 + 按钮,然后选择 导入 cURL

curl_init() 的定义

将 cURL 命令复制并粘贴到上显示的框中。

快速将 cURL 命令导入 Apifox

导入成功的话,就能够以 API 请求的形式查看 cURL 命令。

以 API 请求的形式查看 cURL 命令

使用 Apifox 生成 PHP 代码

如果之前没有使用 PHP 编程语言进行编码的经验,也不要担心,Apifox 具有值得信赖的代码生成功能,提供多种其他编程语言的代码框架。

找到 API 请求上的 </> 生成代码 按钮,然后在下拉列表中选择 生成接口请求代码

使用 Apifox 生成 PHP 代码

接着在弹出的窗口中选择「PHP」,默认显示 cURL 部分,应该看到为 cURL 生成的代码。我们只需要将其复制并粘贴到 IDE(集成开发环境)就可以继续开发应用程序。

 cURL复制并粘贴到 IDE

总结

通过使用 curl_init() 掌握 PUT 请求,不仅可以更新现有资源,还可以创建新资源。无论是管理用户配置文件、修改数据库条目还是上传文件,PUT 请求都可以提供精确且高效的数据操作方法。

curl_init() 提供了一种多功能方法,允许指定数据格式、设置用于安全通信的自定义标头,甚至处理大型文件传输的条件更新和进度报告等场景。curl_init() 函数还可以发送 POST 请求GET 请求DELETE 请求。借助这些新发现的知识,我们可以自信地利用 PUT 请求来提升 Web 应用程序的功能和性能。