api - 在 Azure DevOps 中,列出生成定义 API 返回 401
问题描述
我正在使用 Python 来查询我们组织的 Azure Devops 服务器的 REST API。几个月来,我几乎可以查询每种类型的对象(项目、工作项、团队、迭代、成员等),但是当我尝试查询构建或构建定义时,我得到了 401。我正在使用我的对所有内容具有读取权限的人员访问令牌。这个令牌还没有过期,我可以通过仍然从我的所有其他 API 调用中获得成功的 200 个响应来证明。奇怪的是,我能够使用相同的令牌和基本身份验证从 Postman 获得 200 个结果。
这是我要访问的 URL:
https://{MYCOMPANY}.com:{PORT}/{COLLEGTION}/{PROJECT}/_apis/build/definitions
任何想法为什么这个 API URL 可能会有不同的行为?
解决方案
如果 url 通过 Postman 在同一台机器上运行良好,那么它也应该适用于您的 python 脚本。
您可以检查几点:
1.API版本。对于 TFS2018U2,它是 4.1,对于 Azure Devops Server 2019,它是 5.0。
2.Url,通常是这样的:
http://{tfsServerName}:8080/tfs/{CollectionName}/{ProjectName}/_apis/build/definitions?api-version=4.1
https
除非在服务器上启用 SSL,否则不应使用。另外,请确保启用了基本身份验证。检查这个类似的。
3.查看python代码,windows操作系统有两种认证方式:
Windows 身份验证和带有 PAT 的基本身份验证。
对于 Windows 身份验证,您可以使用这样的代码(来自Roopendra的提示):
import logging
import getpass
import requests
from requests_ntlm import HttpNtlmAuth
username = 'DomainName\\Administrator'
password = 'xxx'
tfsApi = 'http://xxx:8080/tfs/xxx/xxx/_apis/build/definitions?api-version=x.x'
tfsResponse = requests.get(tfsApi,auth=HttpNtlmAuth(username,password))
if(tfsResponse.ok):
tfsResponse = tfsResponse.json()
print(tfsResponse)
else:
tfsResponse.raise_for_status()
对于带有 pat 的基本身份验证,您可以使用代码(来自Jack Jia的提示):
import requests
import base64
pat = 'acxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiq'
authorization = str(base64.b64encode(bytes(':'+pat, 'ascii')), 'ascii')
headers = {
'Accept': 'application/json',
'Authorization': 'Basic '+authorization
}
response = requests.get(
url="http://MyServerName:8080/tfs/xxx/xxx/_apis/build/definitions?api-version=x.x", headers=headers)
print(response.text)
您也可以尝试创建一个新的 PAT 将完全访问用于测试目的...
推荐阅读
- reactjs - 在另一个函数中使用 useCallback 可以吗?
- java - reddit OAuth2 使用 Jsoup 登录
- python - 如何将 python 对象插入 postgreSQL
- python - 仅具有标称特征的过采样,在这种情况下哪种过采样或欠采样技术可能有效?
- ffmpeg - 从 .mp3 到 .al 的 ffmpeg 似乎会减慢和加深音频
- python - 如何通过 Python 正确使用 Selenium 中的 WebDriverWait?
- python - AWS boto (python) 是否支持 SES 签名版本 4?
- google-apps-script - 如何获取所有 TextRun 元素
- javascript - 制表符:字段索引(多维数组)
- javascript - 通过忽略绝对定位的元素使文本居中对齐