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

iyfamqjs  于 2023-02-15  发布在  Python
关注(0)|答案(3)|浏览(295)

我试着把我的生产代码部署到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?

t3irkdon

t3irkdon1#

您不需要显式地对它进行编码,只需将您的dict传递给data参数,它就会被自动编码。

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

从官方文件来看:
通常,您希望发送一些表单编码的数据-非常类似于HTML表单。为此,只需向data参数传递一个字典。当发出请求时,数据字典将自动进行表单编码

3qpi33ja

3qpi33ja2#

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

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

oaxa6hgo3#

需要注意的一件重要事情是,对于嵌套的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)

相关问题