PUT使用Python请求REST API

Tim*_*Tim 10 python rest put

由于某种原因,我的put请求不起作用,我收到语法错误.我是Python的新手,但我的GET和POST请求正常.有没有人看到这个请求和任何建议有什么问题?我想将描述更改为"更改说明"

#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)
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误.

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

Muh*_*hir 5

由于字典中的=符号,语法错误headers:

headers = {'Authorization': 'Bearer ' + token, "Content-Type": "application/json", data=data}
Run Code Online (Sandbox Code Playgroud)

它应该是:

headers = {'Authorization': 'Bearer ' + token, "Content-Type": "application/json", 'data':data}
Run Code Online (Sandbox Code Playgroud)

看到data=data改变了'data':data.冒号和单行情.

你确定要在标题中发送数据吗?或者你应该更换你payloaddata你的put要求吗?

编辑:

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

headers = {'Authorization': 'Bearer ' + token, "Content-Type": "application/json"}
Run Code Online (Sandbox Code Playgroud)

但是你已经设置了Content-Type标题,application/json所以我认为你的PUT请求应该这样做

response = requests.put(url, data=json.dumps(data), headers=headers)
Run Code Online (Sandbox Code Playgroud)

即将您的数据发送为json.

  • @Tim您仍然缺少''data':data`周围的单引号。data是一个字典,不能作为另一个字典的键。 (2认同)