Python HTTP API的嵌套GET参数

Python HTTP API的嵌套GET参数,python,python-requests,Python,Python Requests,我试图使用python请求来使用某个API 我试过: import requests data = ? r = requests.get('http://localhost:8777/v2/meters/instance', params=data) 我想构建的查询如下: http://localhost:8777/v2/meters/instance?q.field=project_id&q.value=s56464dsf6343466 我的问题是,我如何才能通过q.field=p

我试图使用python请求来使用某个API

我试过:

import requests
data = ?
r = requests.get('http://localhost:8777/v2/meters/instance', params=data)
我想构建的查询如下:

http://localhost:8777/v2/meters/instance?q.field=project_id&q.value=s56464dsf6343466
我的问题是,我如何才能通过q.field=project\u id&q.value=s56464dsfs6343466

我试过这样做,但不起作用

data = { 'q': [{'field':'project_id', 'value': 's56464dsf6343466'}] }

我希望有人能帮忙。

您必须明确地命名每个参数:

data = {'q.field':'project_id', 'q.value': 's56464dsf6343466'}
没有将更复杂的结构编组为GET查询参数的标准;现有的唯一标准为您提供键值对。因此,请求库不支持任何其他内容


当然,您可以编写自己的封送拆收器,该封送拆收器接受嵌套的字典或列表,并为您生成一个简单的字典或键值对元组。

您必须明确命名每个参数:

data = {'q.field':'project_id', 'q.value': 's56464dsf6343466'}
没有将更复杂的结构编组为GET查询参数的标准;现有的唯一标准为您提供键值对。因此,请求库不支持任何其他内容


当然,您可以编写自己的封送拆收器,该封送拆收器采用嵌套字典或列表,并为您生成一个平面字典或键值对元组。

您必须首先对数据进行编码,如下所示:

from requests import get
from urllib import urlencode

url = 'http://localhost:8777/v2/meters/instance'
data = {'q': [{'field':'project_id', 'value': 's56464dsf6343466'}]}
get(url, params=urlencode(data), headers=HDR)
from ast import literal_eval

@route('/v2/meters/instance')
def meters():
    kwargs = request.args.to_dict()
    # kwargs is {'q': "[{'field':'project_id', 'value': 's56464dsf6343466'}]"}
    kwargs = {k: literal_eval(v) for k, v in kwargs.iteritems()}
    # kwargs is now {'q': [{'field':'project_id', 'value': 's56464dsf6343466'}]}
然后你像这样解码它:

from requests import get
from urllib import urlencode

url = 'http://localhost:8777/v2/meters/instance'
data = {'q': [{'field':'project_id', 'value': 's56464dsf6343466'}]}
get(url, params=urlencode(data), headers=HDR)
from ast import literal_eval

@route('/v2/meters/instance')
def meters():
    kwargs = request.args.to_dict()
    # kwargs is {'q': "[{'field':'project_id', 'value': 's56464dsf6343466'}]"}
    kwargs = {k: literal_eval(v) for k, v in kwargs.iteritems()}
    # kwargs is now {'q': [{'field':'project_id', 'value': 's56464dsf6343466'}]}

您必须首先对数据进行编码,如下所示:

from requests import get
from urllib import urlencode

url = 'http://localhost:8777/v2/meters/instance'
data = {'q': [{'field':'project_id', 'value': 's56464dsf6343466'}]}
get(url, params=urlencode(data), headers=HDR)
from ast import literal_eval

@route('/v2/meters/instance')
def meters():
    kwargs = request.args.to_dict()
    # kwargs is {'q': "[{'field':'project_id', 'value': 's56464dsf6343466'}]"}
    kwargs = {k: literal_eval(v) for k, v in kwargs.iteritems()}
    # kwargs is now {'q': [{'field':'project_id', 'value': 's56464dsf6343466'}]}
然后你像这样解码它:

from requests import get
from urllib import urlencode

url = 'http://localhost:8777/v2/meters/instance'
data = {'q': [{'field':'project_id', 'value': 's56464dsf6343466'}]}
get(url, params=urlencode(data), headers=HDR)
from ast import literal_eval

@route('/v2/meters/instance')
def meters():
    kwargs = request.args.to_dict()
    # kwargs is {'q': "[{'field':'project_id', 'value': 's56464dsf6343466'}]"}
    kwargs = {k: literal_eval(v) for k, v in kwargs.iteritems()}
    # kwargs is now {'q': [{'field':'project_id', 'value': 's56464dsf6343466'}]}

请为您的问题使用更有用的标题。请为您的问题使用更有用的标题。