PUT使用Python请求REST API

时间:2015-10-14 14:08:24

标签: python rest put

由于某些原因,我的put请求无效,我收到语法错误。我是Python的新手,但我的GET和POST请求正常。有没有人看到这个请求和任何建议有什么问题?我正在尝试将说明更改为“更改说明”

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'

2 个答案:

答案 0 :(得分:5)

由于=词典中的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。冒号和单引号。

您确定要在标头中发送数据吗?或者您应该在payload请求中将data替换为put吗?

编辑:

由于您已编辑了问题,现在您正在将数据作为PUT请求的正文requests.put(data=data)发送,因此标题中不需要它。只需将标题更改为:

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

但是,您已将Content-Type标题设置为application/json,因此我认为您应该在PUT请求中执行

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

将您的数据发送为json。

答案 1 :(得分:1)

问题是您尝试将data分配给词典中的data元素:

headers = { ..., data:data }

这不起作用,因为你不能使用字典作为字典中的键(技术上,因为它不可用)。

你可能想做

headers = { ..., "data":data }
相关问题