2016-08-03 140 views
-1

我想給具有以下數據結構的PUT請求: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'> 

而這個結果不是我想要的。我沒有使用內部字典,而是獲得了一個字典名稱爲一個字典的字符串如果我改變「版本」到「版本」

r = requests.put(url = url, data = {'body' : {'ver': id, 'file_id': str(file_uuid)}}) 

服務器輸出

data: ver type: <type 'unicode'> 

如何發送帶內的字典詞典?

回答

1

使用json=,而不是data=requests.putheaders = {'content-type':'application/json'}時:

r = requests.put(url = url, 
       json = {'body' : {'version': id, 'file_id': str(file_uuid)}}, 
       headers = {'content-type':'application/json'}) 
0

在官方文檔,你找到了一個叫做More complicated POST requests

話題還有,你要發送未形成編碼數據多次。如果您傳入字符串而不是字典,則會直接發佈該數據。

>>> 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)) 
+0

是,這種方式工作,但我想了解在POST數據位置和PUT請求。我沒有在文檔中找到字典限制。 –

+0

限制不在於字典。這裏的數據是將一個關鍵x值映射爲來自HTTP請求的param =值。 –

+0

這是否意味着位置「數據」中的參數只能具有基本類型? –