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

从Azure DevOps OData查询读取数据时遭遇授权错误

从Azure DevOps OData查询读取数据时遭遇授权错误

你现在的代码里藏着两个关键问题,咱们一步步拆解解决:

1. 授权方式用错了(核心问题)

Azure DevOps的PAT(个人访问令牌)不认Bearer格式的认证头,得用Basic认证才行:

  • 把你的PAT当密码,用户名可以随便填(甚至直接用空字符串就行)
  • 把用户名:PAT这个字符串做Base64编码,再放到Authorization: Basic 前缀后面

2. 响应处理的代码逻辑错误

你写的json.loads(open(response.text,encoding='utf-8-sig'))完全搞错了:response.text是API返回的JSON字符串,不是本地文件路径,根本不需要用open()打开,直接传给json.loads()就可以了。

修正后的完整代码

import requests
import json
import base64

endpoint_url = "https://analytics.dev.azure.com/pbi0280/TestOdata/_odata/v4.0-preview/WorkItems?$select=WorkItemId,WorkItemType,Title,State"

pat = "vch3ufmtbnimclfumrms5vgulcktrtakhp2hig3p7v3cs3ormi7q"
# 构建Basic认证内容:用户名留空,后面跟冒号加PAT
auth_str = f":{pat}"
# 转成字节后做Base64编码,再转回字符串
auth_bytes = auth_str.encode('utf-8')
auth_base64 = base64.b64encode(auth_bytes).decode('utf-8')

headers = {"Authorization": f"Basic {auth_base64}"}

response = requests.get(endpoint_url, headers=headers)
# 先检查响应状态码,方便快速排查问题
if response.status_code == 200:
    data = json.loads(response.text)
    print(data)
else:
    print(f"请求失败,状态码:{response.status_code}")
    print(f"错误详情:{response.text}")

额外提醒

  • 确认你的PAT权限足够:至少要包含Analytics Read权限,以及目标项目的访问权限
  • 测试时优先看响应状态码,能更快定位是授权问题还是其他请求错误

备注:内容来源于stack exchange,提问作者at9063

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 15:27:40