如何在 python 中发送 POST 请求中的 urlencoded 参数

How to send urlencoded parameters in POST request in python

我正在尝试将我的生产就绪代码部署到 Heroku 以对其进行测试。不幸的是,它没有获取 JSON 数据,因此我们转换为 x-www-form-urlencoded。

params = urllib.parse.quote_plus(json.dumps({
    'grant_type': 'X',
    'username': 'Y',
    'password': 'Z'
}))
r = requests.post(URL, data=params)
print(params)

这行显示错误,我猜 data=params 格式不正确。

有什么方法可以将 urlencoded 参数 POST 转换为 API 吗?

您不需要显式编码,只需传递一个字典即可。

>>> r = requests.post(URL, data = {'key':'value'})

来自documentation:

Typically, you want to send some form-encoded data — much like an HTML form. To do this, simply pass a dictionary to the data argument. Your dictionary of data will automatically be form-encoded when the request is made

需要注意的重要一点是,对于嵌套的 json 数据,您需要将嵌套的 json 对象转换为字符串。

data = { 'key1': 'value',
         'key2': {
                'nested_key1': 'nested_value1',
                'nested_key2': 123
         }

       }

字典需要转换成这种格式

inner_dictionary = {
                'nested_key1': 'nested_value1',
                'nested_key2': 123
         }


data = { 'key1': 'value',
         'key2': json.dumps(inner_dictionary)

       }

r = requests.post(URL, data = data)

Content-Type header 设置为 application/x-www-form-urlencoded

headers = {'Content-Type': 'application/x-www-form-urlencoded'}
r = requests.post(URL, data=params, headers=headers)