如何在基于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
关键修正点
- 用
current_response跟踪当前页的响应,每次请求后更新,确保循环判断的是最新的API返回 - 仅解析一次当前响应的JSON,提升效率并避免重复解析的潜在错误
- 明确从
value字段收集分页数据(符合Azure绝大多数REST API的分页返回格式,可根据你的API实际结构调整) - 采用
while True配合break的方式,更清晰地控制循环终止条件,避开原逻辑的判断陷阱 - 增加可选的请求失败处理,避免因API报错导致的无限循环
修改后,循环会在最后一页请求完成且没有nextLink时正常退出,后续的文件上传代码就能顺利执行。另外注意verify=False会关闭SSL证书验证,生产环境不建议使用,建议配置合法的证书或信任相应的CA。
内容的提问来源于stack exchange,提问作者PeakyBlinder
相关产品推荐
相关产品推荐

