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

Windows下用cmd脚本调用CURL获取API全量数据的求助

解决API分页数据全量获取问题(CMD + CURL)

看起来你的API做了分页限制,单次请求只返回第一页的数据(刚好对应2017-10-01的内容),而非日期范围的问题。你提到的X-Total-Pages响应头正是分页机制的核心,我们可以基于它编写循环脚本,自动遍历所有页面并合并数据。

步骤1:确认分页参数与总页数

首先运行带-I参数的CURL命令,查看API返回的分页相关响应头:

curl -s -I "https://SITE.fr/data/v1/connections?since=2017-10-01&until=2017-10-09" --header "Authorization:$TOKEN"

你会看到类似这样的响应头:

X-Total-Pages: 5
X-Page: 1
X-Per-Page: 1000
  • X-Total-Pages:数据总页数
  • X-Per-Page:每页默认返回的条目数(如果API支持,可添加&limit=2000参数调整每页数量,减少请求次数)

步骤2:编写CMD循环脚本

下面是完整的CMD脚本,它会自动获取总页数、遍历每一页并将数据合并为一个有效的JSON文件:

@echo off
setlocal enabledelayedexpansion

:: 配置基础参数
set "TOKEN=你的实际令牌内容"
set "BASE_URL=https://SITE.fr/data/v1/connections?since=2017-10-01&until=2017-10-09"
set "OUTPUT_FILE=F:\ADRESS\file.json"
set "PER_PAGE=1000"  :: 可选:根据API支持调整每页条目数

:: 1. 获取数据总页数
for /f "tokens=2 delims=: " %%a in ('curl -s -I "%BASE_URL%&limit=!PER_PAGE!" -H "Authorization:!TOKEN!" ^| findstr /i "X-Total-Pages"') do (
    set "TOTAL_PAGES=%%a"
)

echo 共需获取 !TOTAL_PAGES! 页数据...

:: 2. 初始化输出文件(创建空JSON数组)
echo [ > "!OUTPUT_FILE!"

:: 3. 循环遍历每一页
for /l %%p in (1,1,!TOTAL_PAGES!) do (
    echo 正在获取第 %%p 页...
    set "PAGE_URL=!BASE_URL!&limit=!PER_PAGE!&page=%%p"
    
    :: 处理JSON格式,确保最终文件是有效数组
    if %%p equ 1 (
        :: 第一页保留完整数组结构
        curl -s "!PAGE_URL!" -H "Authorization:!TOKEN!" >> "!OUTPUT_FILE!"
    ) else (
        :: 后续页面去掉首尾的[],只保留数组元素
        curl -s "!PAGE_URL!" -H "Authorization:!TOKEN!" ^| findstr /v /c:"[" /c:"]" >> "!OUTPUT_FILE!"
        :: 添加逗号分隔元素(若最后一页有多余逗号,可手动删除或调整逻辑)
        echo, >> "!OUTPUT_FILE!"
    )
)

:: 4. 闭合JSON数组
echo ] >> "!OUTPUT_FILE!"

echo 所有数据已成功保存到 !OUTPUT_FILE!
endlocal

关键细节说明

  • 延迟扩展:setlocal enabledelayedexpansion 是为了在循环中正确读取和修改变量值
  • JSON合并逻辑:因为每页返回独立的JSON数组,我们保留第一页的[,后续页去掉首尾括号,最后添加],确保整个文件是有效的JSON数组
  • 速率限制处理:如果API有请求频率限制,可在循环中添加timeout /t 1 /nobreak(延迟1秒),避免被临时封禁
  • 分页参数适配:如果API的分页参数不是page(比如用offset),需要修改PAGE_URL为&offset=%%p*!PER_PAGE!

关于最大行数参数的补充

有些API支持limit参数设置每页最大条目数,比如&limit=2000000,但大多数API会有上限(比如1000或5000),因此分页循环是更可靠的全量获取方案。如果你的API允许设置足够大的limit,可以尝试单次请求获取全量数据,但需要先测试是否生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:17:14