gpt4 book ai didi

python - RallyDev : Unable to create defect. 服务器说 "Cannot parse input ..."

转载 作者:行者123 更新时间:2023-11-28 18:44:05 26 4
gpt4 key购买 nike

原帖:我正在尝试以编程方式创建缺陷。我遇到了一些错误,并且无法进一步了解。基本上,这里是代码:

import requests, json

rally_auth = ('my_user', 'my_pw')
rally_auth_url = 'https://rally1.rallydev.com/slm/webservice/v2.0/security/authorize'
rally_defect = 'https://rally1.rallydev.com/slm/webservice/v2.0/defect/defect'
workspace_ref = 'https://rally1.rallydev.com/slm/webservice/v2.0/workspace/12345'
fe_project_ref = 'https://rally1.rallydev.com/slm/webservice/v2.0/project/7890'
current_fe_release_ref = "https://rally1.rallydev.com/slm/webservice/v2.0/release/45678"

r = requests.get(rally_auth_url, auth=rally_auth)
token = r.json()['OperationResult']['SecurityToken']
url = rally_defect + '/create?key=' + token

payload = {
'Name': 'My defect',
'State': 'Open',
'Project': fe_project_ref,
'Rank': 120,
'Release': current_fe_release_ref,
'key': token
}
headers = {'content-type': 'application/json'}
r = requests.post(url, data=json.dumps(payload), auth=rally_auth, headers=headers)

您会注意到我已将 token 放在 POST 的 URL 和数据中。 API 文档说我应该在 URL 中包含 key ,但如果我不在 POST 数据中包含 key ,我会得到:

{"CreateResult": {"_rallyAPIMajor": "2", "_rallyAPIMinor": "0", "Errors": ["Not authorized to perform action: Invalid key"], "Warnings": []}}

如果我包含 key ,API 请求将以不同方式结束。它会在第一个逗号处失败。

{"CreateResult": {"_rallyAPIMajor": "2", "_rallyAPIMinor": "0", "Errors": ["Cannot parse input stream due to I/O error as JSON document: Parse error: expected '}' but saw ',' [ chars read = >>>{\"Name\": \"My defect\",<<< ]"], "Warnings": []}}

我很困惑。


固定代码感谢@nickm

import requests, json

rally_auth = ('my_user', 'my_pw')
rally_auth_url = 'https://rally1.rallydev.com/slm/webservice/v2.0/security/authorize'
rally_defect = 'https://rally1.rallydev.com/slm/webservice/v2.0/defect/defect'
workspace_ref = 'https://rally1.rallydev.com/slm/webservice/v2.0/workspace/12345'
fe_project_ref = 'https://rally1.rallydev.com/slm/webservice/v2.0/project/7890'
current_fe_release_ref = "https://rally1.rallydev.com/slm/webservice/v2.0/release/45678"

s = requests.Session()
r = s.get(rally_auth_url, auth=rally_auth)
token = r.json()['OperationResult']['SecurityToken']
url = rally_defect + '/create?key=' + token

payload = {
'Name': 'My defect',
'State': 'Open',
'Project': fe_project_ref,
'Rank': 120,
'Release': current_fe_release_ref,
}
headers = {'content-type': 'application/json'}
r = s.post(url, data=json.dumps(payload), headers=headers)

最佳答案

如果您使用的是 v2.0 的 WS API,则更新和创建请求需要 token ,因此将其包含在您的发布请求 url 中是正确的。

如果 token 未附加到请求或 token 对于特定 session 无效,则会出现无效 key 错误。当直接访问端点时,我们必须使用 cookie 维护一个 http session ,否则发布会在新 session 的上下文中发生——与我们获得 token 的 session 不同。

请参阅this post .它不特定于 Python,但在概念上是相同的。

我注意到有效负载中的等级。你有排名自定义字段吗? Rally 的 v2.0 中没有这样的内置字段。有一个 DragAndDropRank,它不是数字,通过提供 120 的值来设置它是行不通的。此外,您是否尝试在有效负载中使用双引号而不是单引号?

有一个金字塔 - Rally Python toolkit提供方便的方法,因此您不必直接访问端点。目前它适用于 1.43 的 WS API。该工具包未得到官方支持,但我预计它会在 2014 年 6 月之前更新为与 WS API v2.0 一起使用,届时不再支持 1.43(根据 this schedule )。安全 token 是在 v2.0 中引入的。 WS API 的 1.43 中不存在用于 post 请求的额外身份验证层,如果使用 pyral,则无需处理 token 。

关于python - RallyDev : Unable to create defect. 服务器说 "Cannot parse input ...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22573359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com