在python中如何在POST请求中发送urlencoded参数
我正在尝试将我的生产就绪代码部署到Heroku来测试它。不幸的是,它不接受JSON数据,所以我们将其转换为x-www-form-urlencoded在python中如何在POST请求中发送urlencoded参数,python,api,heroku,flask,urlencode,Python,Api,Heroku,Flask,Urlencode,我正在尝试将我的生产就绪代码部署到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) 这行显示了一个错误,
params = urllib.parse.quote_plus(json.dumps({
'grant_type': 'X',
'username': 'Y',
'password': 'Z'
}))
r = requests.post(URL, data=params)
print(params)
这行显示了一个错误,因为我猜data=params
的格式不正确
有没有办法将URL编码的参数发布到API中?您不需要显式编码,只需传递一个dict即可
>>> r = requests.post(URL, data = {'key':'value'})
从
通常,您希望发送一些表单编码的数据,很像HTML
形式。为此,只需向数据参数传递一个字典。你的
请求时,数据字典将自动进行表单编码
制造
需要注意的一点是,对于嵌套的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)
将
内容类型
标题设置为应用程序/x-www-form-urlencoded
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
r = requests.post(URL, data=params, headers=headers)
只需将dict传递到
数据
,默认情况下,请求将以x-www-form-urlencoded的形式发送。这节省了我的时间。我本应该更加注意我的curl
请求,它工作得很好,但由于这个原因请求
没有工作。我尝试了json.dumps(data)
,发现它也不起作用,requests
自动对请求体进行编码。关键的一点是请求
只对请求正文的顶层进行编码。