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
相关产品推荐
相关产品推荐

