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

如何在基于Azure REST API nextLink的while循环倒数第二次执行后终止

修正Azure REST API分页请求的循环逻辑,确保正常退出并执行后续代码

你的循环逻辑存在致命问题——循环条件始终基于初始的response对象判断是否存在nextLink,没有在每次请求后更新当前响应,导致只要第一次返回包含nextLink,循环就会无限执行,永远到不了后续的文件上传代码。同时原代码还存在重复解析JSON、数据收集逻辑混乱的问题。

原代码核心问题

  • 循环条件依赖的response从未更新,始终是第一次请求的结果,无法触发终止逻辑
  • 重复调用json.loads(response.text),浪费资源且易出错
  • total的extend和append混用,容易导致数据格式混乱或重复

修正后的代码

# 初始化当前响应、累计数据和计数器
current_response = response
total = []
c = 0

while True:
    # 仅解析一次当前响应的JSON数据
    resp_json = current_response.json()
    
    # 收集当前页的数据(Azure分页API的结果通常在'value'字段下,可根据实际返回调整)
    page_data = resp_json.get('value', [])
    total.extend(page_data)
    
    c += 1
    print(f"已获取第{c}页数据")
    
    # 检查是否存在下一页链接
    next_link = resp_json.get('properties', {}).get('nextLink')
    if not next_link:
        # 无下一页,终止循环
        break
    
    # 请求下一页,更新当前响应对象
    current_response = requests.get(next_link, headers=head, verify=False)
    
    # 可选:添加请求失败处理,避免因API报错陷入死循环
    if current_response.status_code != 200:
        print(f"请求第{c+1}页失败,状态码:{current_response.status_code}")
        break

关键修正点

  1. 用current_response跟踪当前页的响应,每次请求后更新,确保循环判断的是最新的API返回
  2. 仅解析一次当前响应的JSON,提升效率并避免重复解析的潜在错误
  3. 明确从value字段收集分页数据(符合Azure绝大多数REST API的分页返回格式,可根据你的API实际结构调整)
  4. 采用while True配合break的方式,更清晰地控制循环终止条件,避开原逻辑的判断陷阱
  5. 增加可选的请求失败处理,避免因API报错导致的无限循环

修改后,循环会在最后一页请求完成且没有nextLink时正常退出,后续的文件上传代码就能顺利执行。另外注意verify=False会关闭SSL证书验证,生产环境不建议使用,建议配置合法的证书或信任相应的CA。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:28:29