将参数字典发送到 RESTful API 时出现问题

问题描述 投票:0回答:1

尝试在请求 get 调用中传递查询参数时出现错误。在 python 中使用以下内容:

import requests as re
url = 'https://api.eia.gov/v2/natural-gas/pri/fut/data/?api_key=' + API_KEY

params = {
    "frequency": "daily",
    "data": [
        "value"
    ],
    "start": "2021-01-01",
    "facets": {
        "series": [
            "RNGWHHD"
        ]
    },
    "offset": 0,
    "length": 5000
}

x = re.get(url = url, params = params)

if x.status_code == 200:
    print('Success')
else:
    print(x.text) 

{"error":"Invalid format for facet 'series'. Must provide which facet and an array of values. For example, to filter by location for VA and CA: facets[location][]=VA&facets[location][]=CA","code":400}

我可以使用 仪表板作为参考返回数据。还可以在请求的 url 中包含参数,如下所示:

'https://api.eia.gov/v2/natural-gas/pri/fut/data/?frequency=daily&data[0]=value&facets[series][]=RNGWHHD&start=2021-01-01&sort[0][column]=period&sort[0][direction]=desc&offset=0&length=5000&api_key=' + API_KEY

x = re.get(url = url)

但不是通过将参数字典传递给

get
。我做错了什么?

python python-requests
1个回答
0
投票

似乎 requests 没有按照您的预期构建 url

如果您在调用 requests.get 函数后看到 url,您应该看到类似这样的内容:

>>> x.url
'https://api.eia.gov/v2/natural-gas/pri/fut/data/?api_key=API_KEY&frequency=daily&data=value&start=2021-01-01&facets=series&offset=0&length=5000'

所以考虑以某种方式解析你的参数

© www.soinside.com 2019 - 2024. All rights reserved.