PHP 使用 cURL 调用 REST API 完整指南

作者:API传播员 · 2025-10-06 · 阅读时间:5分钟

最近我在一个项目中需要使用HTTP 集成外部API。这是我第一次尝试,过程中遇到了一些问题。为了记录经验,也希望能帮助到有类似需求的开发者,我写下了这篇文章。

本文主要介绍如何使用PHP结合REST和JSON数据,通过cURL实现API调用,包括GET、POST、PUT和DELETE等常见HTTP方法。文中所提供的代码和方法适用于PHP 5.6及以上版本。


什么是cURL?

cURL是“客户端URL库”(Client URL Library)的缩写,它支持通过多种协议(如HTTP、HTTPS、FTP等)与不同类型的服务器通信。PHP中的cURL扩展提供了强大的功能,允许开发者轻松地与外部API交互。有关cURL的详细文档,可以参考PHP官方cURL文档

接下来,我们将从基础用法开始,逐步深入了解如何使用cURL进行API调用


基础cURL用法

以下是一个简单的PHP cURL请求示例,它会将API响应作为字符串返回:

// 创建并初始化cURL会话
$ch = curl_init();

// 设置cURL选项
curl_setopt($ch, CURLOPT_URL, "https://api.example.com/data");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);// 执行cURL请求并获取响应
$output = curl_exec($ch);// 关闭cURL会话
curl_close($ch);// 输出响应
echo $output;

在上述代码中,我们使用curl_exec()执行了请求,并将结果存储在$output变量中。即使在调用curl_close()关闭连接后,$output变量仍然可用。


封装cURL为可复用函数

为了提高代码的可维护性,我们可以将cURL的调用逻辑封装成一个通用函数。以下是一个支持GET、POST、PUT和DELETE等多种HTTP方法的函数示例:

function callAPI($method, $url, $data, $headers = false) {
    $ch = curl_init();

    // 设置URL
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    // 根据请求方法设置cURL选项
    switch (strtoupper($method)) {
        case "POST":
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            break;
        case "PUT":
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            break;
        case "DELETE":
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
            break;
    }    // 设置请求头(如果提供)
    if ($headers) {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    }    // 执行请求并获取响应
    $result = curl_exec($ch);    // 关闭cURL会话
    curl_close($ch);    return $result;
}

GET请求示例

GET请求是最简单的API调用方式,通常用于从服务器获取数据。在调用callAPI函数时,$data参数可以设置为false

$get_data = callAPI('GET', 'https://api.example.com/get_url/' . $user['User']['customer_id'], false);
$response = json_decode($get_data, true);

在上面的代码中,我们将API返回的JSON字符串通过json_decode()转换为PHP数组,方便后续操作。


POST请求示例

POST请求通常用于向服务器发送数据。以下是一个POST请求的示例:

$data_array = array(
    "name" => "John Doe",
    "email" => "john.doe@example.com"
);

$post_data = json_encode($data_array);$response = callAPI('POST', 'https://api.example.com/post_url', $post_data);
$response_array = json_decode($response, true);

在这里,我们使用json_encode()将PHP数组转换为JSON字符串,并将其作为请求体发送给API。


PUT请求示例

PUT请求与POST类似,主要用于更新资源。以下是一个PUT请求的示例:

$data_array = array(
    "id" => 123,
    "status" => "active"
);

$put_data = json_encode($data_array);$response = callAPI('PUT', 'https://api.example.com/put_url', $put_data);
$response_array = json_decode($response, true);

DELETE请求示例

DELETE请求用于删除资源。以下是一个DELETE请求的示例:

$id = 123;

$response = callAPI('DELETE', 'https://api.example.com/delete_url/' . $id, false);

需要注意的是,DELETE操作通常是不可逆的,因此在调用此类API时需要格外小心。


自定义请求头的支持

在某些情况下,我们需要为API调用添加自定义请求头。为此,可以在callAPI函数中添加一个$headers参数,并在调用时传入所需的请求头。例如:

$headers = array(
    "Authorization: Bearer your_token",
    "Content-Type: application/json"
);

$response = callAPI('GET', 'https://api.example.com/secure_data', false, $headers);

使用搜索参数的示例

以下示例展示了如何在调用API前使用搜索参数筛选数据:

$one_month_ago = date("Y-m-d", strtotime("-1 month"));

$headers = array(
    "Custom-Header: Search-Parameter=$one_month_ago"
);$response = callAPI('GET', 'https://api.example.com/search', false, $headers);

在这里,我们通过自定义请求头传递了一个搜索参数,用于获取过去30天内的相关数据。


总结

本文介绍了如何使用PHP结合cURL实现API调用,包括GET、POST、PUT和DELETE等常见HTTP方法,并提供了封装函数的实现和多个实际应用示例。通过这些内容,相信你已经对cURL的工作原理和使用方法有了更深入的理解。

如果你想进一步学习如何生成AUTH密钥(如utoken)等高级功能,可以参考我撰写的PHP cURL API调用的第二部分内容。

原文链接: https://weichie.com/blog/curl-api-calls-with-php/