在Python请求中的字典中的PUT字典

时间:2016-08-03 19:27:04

标签: python dictionary python-requests

我想发送一个包含以下数据结构的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'>

如何使用内部字典发送字典?

2 个答案:

答案 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))