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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:47:17