You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP开发求助:如何用Curl调用API获取图书列表?

把Curl GET请求转成PHP代码的完整指南

嘿,你好!既然你已经有中初级PHP开发经验了,上手Curl调用API其实非常容易。咱们来一步步把你给出的Curl命令转成可用的PHP代码,同时帮你做好后续多请求场景的准备。

首先先明确你的原Curl命令:

curl --request GET \ --url 'http://example.com/{identifier}'

其中{identifier}取值为main,所以实际请求的URL是http://example.com/main。

基础实现版本

先从最基础的代码开始,每一步都给你解释清楚:

// 1. 初始化Curl会话,创建一个Curl资源句柄
$ch = curl_init();

// 2. 设置Curl请求的关键参数
// 指定请求URL,替换占位符为实际的"main"
curl_setopt($ch, CURLOPT_URL, 'http://example.com/main');
// 显式设置请求方法为GET(其实Curl默认就是GET,写出来更直观)
curl_setopt($ch, CURLOPT_HTTPGET, true);
// 这个选项很重要:让Curl把响应内容以字符串返回,而不是直接输出到页面
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 3. 执行请求,获取API返回的内容
$response = curl_exec($ch);

// 4. 检查请求是否成功,处理可能的错误
if ($response === false) {
    // 如果请求失败,打印Curl的错误信息
    echo 'Curl请求失败: ' . curl_error($ch);
} else {
    // 假设API返回的是JSON格式(图书列表API基本都是),解析成PHP数组
    $books = json_decode($response, true);
    
    if ($books !== null) {
        // 解析成功,这里就拿到了图书列表,可以做后续处理
        print_r($books);
    } else {
        // 解析JSON失败,打印错误原因
        echo '解析图书列表失败: ' . json_last_error_msg();
    }
}

// 5. 关闭Curl会话,释放服务器资源
curl_close($ch);

封装成可复用函数(适配后续多请求场景)

因为你后续还要发起更多Curl请求,把请求逻辑封装成函数会让代码更简洁、更易维护。这里给你写一个通用的GET请求函数:

/**
 * 发送API GET请求并返回解析后的JSON数据
 * @param string $url 请求的API地址
 * @return array|null 成功返回解析后的数组,失败返回null
 */
function sendApiGetRequest(string $url): ?array {
    // 初始化Curl并直接传入URL,简化代码
    $ch = curl_init($url);
    
    // 设置通用选项
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // 设置请求超时时间(防止请求卡住)
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    // 禁用SSL证书验证(如果是测试环境,正式环境建议开启)
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    
    // 执行请求
    $response = curl_exec($ch);
    
    // 检查Curl执行错误
    if (curl_errno($ch)) {
        // 把错误记录到日志(比直接echo更适合生产环境)
        error_log('API请求出错: ' . curl_error($ch));
        curl_close($ch);
        return null;
    }
    
    // 获取HTTP响应状态码,比如200表示请求成功
    $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    if ($httpStatusCode !== 200) {
        error_log('API返回错误状态码: ' . $httpStatusCode);
        curl_close($ch);
        return null;
    }
    
    // 关闭Curl会话
    curl_close($ch);
    
    // 解析JSON响应
    $data = json_decode($response, true);
    // 检查解析是否成功
    return json_last_error() === JSON_ERROR_NONE ? $data : null;
}

// 使用函数获取图书列表
$booksList = sendApiGetRequest('http://example.com/main');

if ($booksList) {
    // 拿到图书列表后,就可以发起后续请求了,比如遍历列表获取单本图书详情
    foreach ($booksList as $book) {
        // 假设每本图书有id字段,拼接详情API地址
        $bookDetail = sendApiGetRequest("http://example.com/books/{$book['id']}");
        if ($bookDetail) {
            // 处理单本图书的详情数据
            echo "图书《{$bookDetail['title']}》详情:<br>";
            print_r($bookDetail);
        }
    }
}

实用小贴士

  • 如果API需要身份认证(比如Bearer Token),可以在函数里添加请求头:
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Authorization: Bearer 你的认证Token',
        'Content-Type: application/json'
    ]);
    
  • 如果后续需要发送POST请求,只需要修改两个选项:
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData)); // $postData是要发送的数组
    
  • 正式环境建议开启SSL证书验证,把CURLOPT_SSL_VERIFYPEER设为true,并指定证书路径。

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:05:41