我正在尝试根据参考资料使用Python requests lib为Jira编写API客户端: https://developer.atlassian.com/server/jira/platform/jira-rest-api-examples/
要生成的请求:
http://localhost:8080/rest/api/2/search?jql=assignee=charlie&startAt=2&maxResults=2
据我所知,GET请求的参数应作为字典传递,例如:
params = {'assignee':'charlie', 'startAt':'2'}
但是所有主要参数都嵌套在 jql 参数中,因此我认为应该有一个嵌套的字典,例如:
params = {'jql': {'assignee': 'charlie'}}
但这是行不通的-结果是我请求
/rest/api/2/search?jql=assignee
如预期的/rest/api/2/search?jql=assignee=charlie
使用
r = requests.get(url, params=params)
如何处理此类请求?
UPD:
更清楚地说,我想将请求包装在具有kwargs的方法中,例如:
search_query(assignee='charlie', startAt=1, etc...)
然后使用此参数生成查询,但也许还有其他想法。
答案 0 :(得分:2)
您缺少几个关键参数,主要是如果您通过请求推送数据,则数据将进入data
参数。同样,在推送JSON数据时,还需要正确设置标头。最后一件事是身份验证。您是否尝试过以这种方式发布?
import json
requests.post(url=url, headers={"Content-Type": "application/json"},
auth=('username', 'password'), # your username and password
data=json.dumps(params)
)
此外,如果您要将查询作为数据推送,则根据您提供的JIRA文档(https://developer.atlassian.com/server/jira/platform/jira-rest-api-examples/),您想要的url为/rest/api/2/search
。
答案 1 :(得分:1)
这不是您要寻找的答案,但是...
您必须明确命名每个参数:
没有标准将更复杂的结构编组为GET查询参数;唯一存在的标准为您提供键值对。因此,请求库不支持其他任何内容。