【发布时间】:2021-09-02 15:57:28
【问题描述】:
我正在尝试使用 TeamCity REST API 将构建添加到队列中,但在授权方面遇到了一些困难。
我已经定义了我们的 teamcity 服务器的 url,并通过管理页面生成了一个授权令牌
TEAMCITY_URL = 'http://teamcity.somedomain.com'
BEARER_TOKEN = 'SOMELONGTOKEN'
使用此 URL 和令牌,我可以成功发出 GET 请求
import json
import requests
session = requests.Session()
session.headers.update({
'Accept': 'application/json',
'Authorization': f'Bearer {BEARER_TOKEN}',
})
response = session.get(f'{TEAMCITY_URL}/app/rest/projects/example/buildTypes')
assert(response.status_code == requests.codes.ok) # this succeeds, can parse response fine later
但是如果我尝试 POST 构建到队列中,我会得到 403
payload = {
'branchName': 'master',
'buildType': {
'id': buildID # assume this was already defined
}
}
response = session.post(f'{TEAMCITY_URL}/app/rest/buildQueue', json=payload)
assert(response.status_code == requests.codes.ok) # fails with 403
后者response.text是
'403 Forbidden: Responding with 403 status code due to failed CSRF check: authenticated POST request is made, but not tc-csrf-token parameter and X-TC-CSRF-Token header is provided.. 对于临时解决方法,您可以设置内部属性 teamcity.csrf.paranoid=false 并在您的请求中提供有效的 Origin={teamcity_url} 标头\n'
如何正确使用此不记名令牌来执行POST 请求?
【问题讨论】:
标签: python rest python-requests teamcity