使用Python Requests通过Continuation Token无法获取ADO下一批用户求助
解决Azure DevOps用户权限列表分页获取问题
你的问题出在循环请求时未正确传递continuationToken参数:代码里的URL使用了{ct}占位符,但没有启用Python的f-string格式化,导致实际请求的URL中continuationToken值是字面量{ct}而非拿到的有效token,所以服务器始终返回第一页的50条数据。
以下是修正后的完整代码,包含分页逻辑和结果合并:
import requests import base64 pat = 'MYPAT' authorization = str(base64.b64encode(bytes(':' + pat, 'ascii')), 'ascii') headers = { 'Accept': 'application/json', 'Authorization': 'Basic ' + authorization } # 存储所有用户权限数据的列表 all_user_entitlements = [] # 初始请求,获取第一页数据和初始continuationToken response = requests.get( url="https://vsaex.dev.azure.com/adient/_apis/userentitlements?select=Projects&api-version=6.1-preview.3", headers=headers ) response_data = response.json() all_user_entitlements.extend(response_data.get('value', [])) ct = response_data.get('continuationToken', '') # 循环请求后续分页,直到没有continuationToken while ct: # 用f-string正确嵌入continuationToken变量 response2 = requests.get( url=f"https://vsaex.dev.azure.com/adient/_apis/userentitlements?select=Projects&continuationToken={ct}&api-version=6.1-preview.3", headers=headers ) page_data = response2.json() # 将当前页数据加入总列表 all_user_entitlements.extend(page_data.get('value', [])) # 更新continuationToken为当前页返回的token ct = page_data.get('continuationToken', '') # 输出总用户数和完整数据 print(f"共获取到 {len(all_user_entitlements)} 名用户权限数据") # 可以在这里处理all_user_entitlements,比如写入文件或进一步分析 # 示例:打印前10条用户信息 for user in all_user_entitlements[:10]: print(f"用户ID: {user['id']}, 显示名: {user['displayName']}, 所属项目: {[p['name'] for p in user.get('projects', [])]}")
关键修正点说明:
- 启用f-string格式化:在URL字符串前加
f,确保{ct}被替换为实际的token值 - 更新continuationToken:每次请求后从返回的JSON中获取新的token,否则会陷入无限循环
- 合并分页结果:将每一页的
value字段数据合并到总列表,最终得到所有用户的信息
内容的提问来源于stack exchange,提问作者Raviteja Atchuta
相关产品推荐
相关产品推荐

