Python POST 使用嵌套字典请求 values/args
Python POST request with Nested Dictionary values/args
已查看 here, here and here,但仍有问题。
我有一个看起来像这样的 POST data
:
{
"config":{
"param1": "param1 value",
"param2": "param2 value",
"param3": "param3 value"
},
"name": "Testing API",
"url": "https://testingapi.my.own.com",
"enabled": true
}
我有以下 headers:
{
"Content-Type": "application/json",
"referer": "https://testingapi.my.own.com",
"X-CSRFToken": "my token value here"
}
如何为 session.post
设置格式?
我不断收到 400
的响应代码,并且日志表明我没有在 post
请求中发送所需的参数。
代码如下:
headers = {"Content-Type": "application/json",
"referer": "https://testingapi.my.own.com",
"X-CSRFToken": "my token"
}
request_data = {
"config":{
"param1": "param1 value",
"param2": "param2 value",
"param3": "param3 value"
},
"name": "Testing API",
"url": "https://testingapi.my.own.com",
"enabled": "true"
}
#tried the following:
r = session.post(url, data = request_data, headers=headers)
r = session.post(url, json = json.dumps(request_data), headers=headers)
当您执行 data = request_data
时,您的嵌套字典未按预期打包到请求正文中。尝试检查 request
对象的 body
属性:
import requests
s = requests.Session()
request_data = {
"config":{
"param1": "param1 value",
"param2": "param2 value",
"param3": "param3 value"
},
"name": "Testing API",
"url": "https://testingapi.my.own.com",
"enabled": True
}
r = s.post('https://httpbin.org/post/404', data=request_data )
r.request.body
returns
'url=https%3A%2F%2Ftestingapi.my.own.com&enabled=True&config=param3&config=param2&config=param1&name=Testing+API'
当你json = json.dumps(request_data)
你json-转储你的数据两次,所以服务器(在反序列化数据一次之后)只看到一个json 字符串而不是未序列化的字典(参见 requests docs)。
因此您需要在将数据传递给 data
之前序列化您的数据
r = s.post('https://httpbin.org/post/404', data=json.dumps(request_data), )
或者按照 Paul 的建议,使用 json
参数并将您的数据字典传递给它:
r = s.post('https://httpbin.org/post/404', json=request_data)
已查看 here, here and here,但仍有问题。
我有一个看起来像这样的 POST data
:
{
"config":{
"param1": "param1 value",
"param2": "param2 value",
"param3": "param3 value"
},
"name": "Testing API",
"url": "https://testingapi.my.own.com",
"enabled": true
}
我有以下 headers:
{
"Content-Type": "application/json",
"referer": "https://testingapi.my.own.com",
"X-CSRFToken": "my token value here"
}
如何为 session.post
设置格式?
我不断收到 400
的响应代码,并且日志表明我没有在 post
请求中发送所需的参数。
代码如下:
headers = {"Content-Type": "application/json",
"referer": "https://testingapi.my.own.com",
"X-CSRFToken": "my token"
}
request_data = {
"config":{
"param1": "param1 value",
"param2": "param2 value",
"param3": "param3 value"
},
"name": "Testing API",
"url": "https://testingapi.my.own.com",
"enabled": "true"
}
#tried the following:
r = session.post(url, data = request_data, headers=headers)
r = session.post(url, json = json.dumps(request_data), headers=headers)
当您执行 data = request_data
时,您的嵌套字典未按预期打包到请求正文中。尝试检查 request
对象的 body
属性:
import requests
s = requests.Session()
request_data = {
"config":{
"param1": "param1 value",
"param2": "param2 value",
"param3": "param3 value"
},
"name": "Testing API",
"url": "https://testingapi.my.own.com",
"enabled": True
}
r = s.post('https://httpbin.org/post/404', data=request_data )
r.request.body
returns
'url=https%3A%2F%2Ftestingapi.my.own.com&enabled=True&config=param3&config=param2&config=param1&name=Testing+API'
当你json = json.dumps(request_data)
你json-转储你的数据两次,所以服务器(在反序列化数据一次之后)只看到一个json 字符串而不是未序列化的字典(参见 requests docs)。
因此您需要在将数据传递给 data
r = s.post('https://httpbin.org/post/404', data=json.dumps(request_data), )
或者按照 Paul 的建议,使用 json
参数并将您的数据字典传递给它:
r = s.post('https://httpbin.org/post/404', json=request_data)