PHP调用单页100条限制的分页API如何获取全部分页记录
全量拉取分页记录实现方案
首先明确:这类采用page_number+page_size设计的标准分页API,不支持传入页码范围一次性获取全量数据,不要尝试传范围值、特殊值(比如all、0、1-100这类),这类传参基本都会被接口判定为非法参数返回错误。
因为接口不返回总记录数,正确的实现思路是逐页循环请求,直到拉取到空结果页终止,即可拿到全量数据,具体步骤如下:
- 初始化当前请求页码为1,初始化空数组存储所有拉取到的记录
- 开启循环:构造当前页码对应的请求URL,通过curl发起请求
- 解析接口返回结果,提取当前页的记录列表
- 如果当前页记录为空,说明已经遍历完所有分页,直接终止循环
- 如果当前页有记录,将记录合并到总结果数组,页码自增1,发起下一页请求
- 循环结束后,存储的数组就是对应账号下的所有产品记录
PHP+Curl实现代码示例
<?php // 基础请求地址,page_number留空后续循环拼接 $baseUrl = "https://api.shop.com/v1/products?page_size=100&page_number="; // 存储全量结果的数组 $allProducts = []; // 起始页码 $currentPage = 1; // 初始化curl句柄,公共配置只需要设置一次 $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 按需补全接口要求的鉴权、请求头配置 // curl_setopt($ch, CURLOPT_HTTPHEADER, [ // "Authorization: Bearer 你的接口访问Token", // "Accept: application/json" // ]); while (true) { // 拼接当前页的请求地址 $requestUrl = $baseUrl . $currentPage; curl_setopt($ch, CURLOPT_URL, $requestUrl); $response = curl_exec($ch); // 处理curl请求错误,可按需加重试逻辑 if (curl_errno($ch)) { // 可在此处记录错误日志、抛出异常 break; } // 解析接口返回的JSON结果 $result = json_decode($response, true); // 注意:这里的键名要根据接口实际返回结构调整,常见的列表键名有data、list、products等 $pageItems = $result['data'] ?? []; // 当前页无数据,说明已经到最后一页,终止循环 if (empty($pageItems)) { break; } // 合并当前页数据到全量结果 $allProducts = array_merge($allProducts, $pageItems); // 页码自增,准备请求下一页 $currentPage++; // 可选:增加100毫秒请求间隔,避免请求频率过高触发接口限流 usleep(100000); } curl_close($ch); // 处理完成,$allProducts即为所有分页的全量产品记录 print_r($allProducts);
注意事项
- 代码中提取分页列表的键名需要和你调用的接口实际返回结构对齐,不要直接硬套示例中的
data字段 - 如果接口返回规则是「最后一页的记录数小于page_size」,可以加判断:当当前页记录数<100时直接终止循环,不需要再请求下一个空页,拉取效率更高
- 建议加上请求失败重试、异常捕获逻辑,避免因为网络波动导致拉取中断
- 严格遵守接口的限流规则,不要设置过高的并发请求或者过短的请求间隔,避免被接口封禁访问权限
内容的提问来源于stack exchange,提问作者user9361135
相关产品推荐
相关产品推荐

