带有嵌套参数的Python GET请求

时间:2019-05-28 22:01:12

标签: python python-requests

我正在尝试根据参考资料使用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...)

然后使用此参数生成查询,但也许还有其他想法。

2 个答案:

答案 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查询参数;唯一存在的标准为您提供键值对。因此,请求库不支持其他任何内容。

Nested GET parameters for a HTTP API