2015-10-14 169 views
5

由於某種原因,我的put請求不起作用,並且出現語法錯誤。我是Python新手,但我的GET和POST請求正常工作。有沒有人看到這個請求和任何建議有什麼問題?我試圖改變描述爲「修改描述」使用Python將PUT請求發送到REST API

PUT

#import requests library for making REST calls 
import requests 
import json 

#specify url 
url = 'my URL' 

token = "my token" 

data = { 
     "agentName": "myAgentName", 
     "agentId": "20", 
     "description": "Changed Description", 
     "platform": "Windows" 
     } 

headers = {'Authorization': 'Bearer ' + token, "Content-Type": "application/json", data:data} 

#Call REST API 
response = requests.put(url, data=data, headers=headers) 

#Print Response 
print(response.text) 

這裏是我得到的錯誤。在因爲=跡象

Traceback (most recent call last): 
    line 17, in <module> 
    headers = {'Authorization': 'Bearer ' + token, "Content-Type": "application/json", data:data} 
TypeError: unhashable type: 'dict' 
+0

*出於某種原因,我的PUT請求沒有工作,我得到的語法錯誤。*顯然,這是至關重要的,你在這裏複製和粘貼這些錯誤,因爲他們將最可能會立即*解決問題*。 –

+0

我同意你的意見。我已經更新了我的原始帖子以及錯誤。 – Tim

+1

你在你的頭文件中有你的'data' - 大概你只需要從你的頭文件中刪除數據,你已經把它作爲'data'參數傳遞了。 – AChampion

回答

3

語法錯誤在你headers詞典:

headers = {'Authorization': 'Bearer ' + token, "Content-Type": "application/json", data=data} 

它應該是:

headers = {'Authorization': 'Bearer ' + token, "Content-Type": "application/json", 'data':data} 

data=data'data':data改變。冒號和單引號。

你確定你會發送數據在你的頭?或者您應該在put請求中將​​替換爲data

編輯:

正如你所編輯的問題,現在你要發送的數據作爲PUT請求的身體requests.put(data=data)所以在頭不需要它。只要改變你的頭來:

headers = {'Authorization': 'Bearer ' + token, "Content-Type": "application/json"} 

但是,正如你已經設置你的Content-Typeapplication/json所以我覺得在你的PUT請求你應該做

response = requests.put(url, data=json.dumps(data), headers=headers) 

就是把你的數據作爲JSON。

+0

我已對原始帖子進行了更改,但仍收到錯誤消息。任何額外的想法? – Tim

+1

@Tim你仍然在你的''data':data'中缺少單引號。 'data'是一個字典,不能作爲另一個字典的關鍵字。 –

+0

你是對的。這是我需要做的。謝謝。 – Tim

1

的問題是,你嘗試分配datadata元素在你的字典裏:

headers = { ..., data:data } 

那不行,因爲你不能用一個字典作爲一個關鍵的字典(在技術上,因爲它不可哈希)。

你可能想要做

headers = { ..., "data":data } 
+0

不幸的是,Marcus的問題並不是數據周圍缺少引號,而是數據不應該在我的頭文件中。 – Tim

+0

@Tim我直接從你的錯誤信息中獲取代碼,所以它絕對存在! –

+0

請務必確保您發佈的代碼完全是您遇到問題的代碼 –