如何用Curl实现API基于游标的分页循环获取全量数据并合并存储
用CMD脚本实现API分页数据全量导出方案
前提确认
首先你需要确认目标API的分页规则:
- 单次返回100条,通常API会支持分页参数,比如
offset(偏移量,每次加100)+limit=100,或者page(页码,每次加1)+page_size=100。先手动测试一下,比如在浏览器里访问https://你的API地址?offset=0&limit=100,看是否返回前100条,再试offset=100看是否返回下一页。
一键执行的CMD批处理脚本
因为你没有编码经验,直接用Windows批处理(.bat文件)就能实现循环调用和数据合并,步骤如下:
- 新建一个文本文件,把下面的代码复制进去,然后把后缀改成
.bat(比如fetch_all_data.bat) - 替换代码里的配置参数(API地址、授权信息、代理等)
- 双击运行这个bat文件,就能自动把所有页的数据合并到一个JSON文件里
@echo off setlocal enabledelayedexpansion :: -------------------------- 配置参数 -------------------------- set "API_URL=https://你的实际API地址" :: 注意:这里的Basic后面是你把「用户名:密码」转成Base64编码后的字符串 set "AUTH=Basic 你的Base64编码授权字符串" :: 不需要代理就把下面这行删掉 set "PROXY=http://你的代理地址:端口" :: 最终保存的全量数据文件名 set "OUTPUT_FILE=all_api_data.json" :: -------------------------- 配置结束 -------------------------- set "offset=0" set "page_size=100" :: 初始化输出文件为一个空的JSON数组 echo [] > %OUTPUT_FILE% :loop echo 正在获取第 %offset% 条开始的数据... :: 根据是否有代理,调用对应的curl命令 if defined PROXY ( curl -X GET "%API_URL%?offset=%offset%&limit=%page_size%" -H "accept: application/json" -H "authorization: %AUTH%" --proxy "%PROXY%" -o temp_page.json -s ) else ( curl -X GET "%API_URL%?offset=%offset%&limit=%page_size%" -H "accept: application/json" -H "authorization: %AUTH%" -o temp_page.json -s ) :: 检查当前页是否有数据(空JSON文件大小通常≤2) for %%f in (temp_page.json) do set "filesize=%%~zf" if !filesize! leq 2 goto finish :: 处理当前页数据,合并到总文件 :: 读取临时文件内容,去掉首尾的[] set /p "page_data="<temp_page.json set "page_data=!page_data:~1,-1!" :: 如果不是第一页,先给总文件末尾加个逗号 if %offset% gtr 0 ( powershell -Command "(Get-Content %OUTPUT_FILE%) -replace '\]$', ',' | Set-Content %OUTPUT_FILE%" ) :: 把当前页数据追加进去,再补全JSON数组的结尾 powershell -Command "(Get-Content %OUTPUT_FILE%) + '!page_data!' | Set-Content %OUTPUT_FILE%" powershell -Command "(Get-Content %OUTPUT_FILE%) -replace '\]$', ']' | Set-Content %OUTPUT_FILE%" :: 偏移量加100,继续下一页 set /a offset+=page_size goto loop :finish :: 清理临时文件 del temp_page.json echo 全量数据获取完成!已保存到 %OUTPUT_FILE% endlocal
针对不同分页规则的调整
如果你的API用的是page参数而不是offset:
- 把脚本里的
offset改成page,初始值设为1 - 把curl命令里的
?offset=%offset%&limit=%page_size%改成?page=%page%&page_size=%page_size% - 循环里的
set /a offset+=page_size改成set /a page+=1
注意事项
- 先单独测试curl命令:把配置好的curl命令复制到CMD里运行,确认能正常返回JSON数据,再运行bat脚本
- Base64编码转换:把「用户名:密码」(比如
admin:123456)转成Base64字符串,可以用Windows自带的命令:在CMD里运行echo admin:123456 | certutil -encode -f - temp.b64 && findstr /v /c:- temp.b64 && del temp.b64,输出的就是编码后的字符串 - 如果API返回的分页信息里有总条数,也可以计算循环次数(比如总条数500,就循环5次),但上面的脚本会自动判断什么时候没有数据,更省心
内容的提问来源于stack exchange,提问作者KIDA02
相关产品推荐
相关产品推荐

