我想发送一个包含以下数据结构的PUT请求:
{ body : { version: integer, file_id: string }}
以下是客户端代码:
def check_id():
id = request.form['id']
res = logic.is_id_valid(id)
file_uuid = request.form['file_id']
url = 'http://localhost:8050/firmwares'
r = requests.put(url = url, data = {'body' : {'version': id, 'file_id': str(file_uuid)}})
这是服务器代码:
api.add_resource(resources.FirmwareNewVerUpload, '/firmwares')
class FirmwareNewVerUpload(rest.Resource):
def put(self):
try:
args = parser.parse_args()
except:
print traceback.format_exc()
print 'data: ', str(args['body']), ' type: ', type(args['body'])
return
服务器打印:
data: version type: <type 'unicode'>
这个结果不是我想要的。而不是内部字典我得到一个名称为一个字典键的字符串。如果我改变版本&#39;到&#39; ver&#39;
r = requests.put(url = url, data = {'body' : {'ver': id, 'file_id': str(file_uuid)}})
服务器打印
data: ver type: <type 'unicode'>
如何使用内部字典发送字典?
答案 0 :(得分:6)
在执行json=
和data=
时使用requests.put
代替headers = {'content-type':'application/json'}
:
r = requests.put(url = url,
json = {'body' : {'version': id, 'file_id': str(file_uuid)}},
headers = {'content-type':'application/json'})
答案 1 :(得分:0)
在官方文档中,您找到了一个名为More complicated POST requests
的主题您希望多次发送未经表单编码的数据。如果传入字符串而不是dict,则会直接发布该数据。
>>> import json
>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}
>>> r = requests.post(url, data=json.dumps(payload))
将数据转换为JSON可能是一种很好的方法。
import json
def check_id():
id = request.form['id']
res = logic.is_id_valid(id)
file_uuid = request.form['file_id']
url = 'http://localhost:8050/firmwares'
payload = {'body' : {'version': id, 'file_id': str(file_uuid)}}
r = requests.put(url=url, data=json.dumps(payload))