查询字符串中的字典类型参数

Cas*_*sey 6 python-requests

我正在尝试将以下 URL 结构提供给请求:

https://inventory.data.gov/api/action/datastore_search?resource_id=8ea44bc4-22ba-4386-b84c-1494ab28964b&filters={"City":"Las Vegas","State":"NV"}
Run Code Online (Sandbox Code Playgroud)

我想将 URL 分解为参数,但我很难让过滤器部分正常工作。我最终使用了以下代码:

url = 'https://inventory.data.gov/api/action/datastore_search?' \
        'resource_id=8ea44bc4-22ba-4386-b84c-1494ab28964b&' \
        'filters={"City":"' + city + '","State":"' + state + '"}'

resp = requests.get(url=url)
print resp.url
Run Code Online (Sandbox Code Playgroud)

有谁知道我如何修改它以处理类似的请求requests.get(url=url, params=params)

Thi*_*Not 11

这看起来像 JSON 数据。您可以使用json 模块将 Python 对象转换为 JSON 字符串:

import json
import requests

city = 'Las Vegas'
state = 'NV'

filters = {
    'City': city,
    'State': state
}
params = {
    'resource_id': '8ea44bc4-22ba-4386-b84c-1494ab28964b',
    'filters': json.dumps(filters)
}

response = requests.get('http://www.example.com/', params=params)
Run Code Online (Sandbox Code Playgroud)

这会向以下地址发送请求:

http://www.example.com/?filters=%7B%22City%22%3A+%22Las+Vegas%22%2C+%22State%22%3A+%22NV%22%7D&resource_id=8ea44bc4-22ba-4386-b84c-1494ab28964b
Run Code Online (Sandbox Code Playgroud)

在哪里

%7B%22City%22%3A+%22Las+Vegas%22%2C+%22State%22%3A+%22NV%22%7D
Run Code Online (Sandbox Code Playgroud)

URL 编码版本

{"City": "Las Vegas", "State": "NV"}
Run Code Online (Sandbox Code Playgroud)