使用 Python 对 REST API 的 PUT 请求
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/33127636/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
PUT Request to REST API using Python
提问by Tim
For some reason my put request is not working and I am getting syntax errors. I am new to Python but I have my GET and POST requests working. Does anyone see anything wrong with this request and any recommendations? I am trying to change the description to "Changed Description"
出于某种原因,我的 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)
Here is the error I am getting.
这是我得到的错误。
Traceback (most recent call last):
line 17, in <module>
headers = {'Authorization': 'Bearer ' + token, "Content-Type": "application/json", data:data}
TypeError: unhashable type: 'dict'
采纳答案by Muhammad Tahir
Syntax error in because of =
sign in your headers
dictionary:
由于=
在您的headers
字典中签名导致语法错误:
headers = {'Authorization': 'Bearer ' + token, "Content-Type": "application/json", data=data}
It should be:
它应该是:
headers = {'Authorization': 'Bearer ' + token, "Content-Type": "application/json", 'data':data}
See data=data
is changed with 'data':data
. Colon and Single Quotes.
见data=data
与'data':data
。冒号和单引号。
And are you sure you will be sending data in your headers? Or you should replace your payload
with data
in your put
request?
您确定要在标头中发送数据吗?或者你应该更换你payload
与data
你的put
要求吗?
Edit:
编辑:
As you have edited the question and now you are sending data as PUT request's body requests.put(data=data)
so there is no need of it in headers. Just change your headers to:
由于您已经编辑了问题,现在您将数据作为 PUT 请求的正文发送requests.put(data=data)
,因此标题中不需要它。只需将您的标题更改为:
headers = {'Authorization': 'Bearer ' + token, "Content-Type": "application/json"}
But as you have set your Content-Type
header to application/json
so I think in your PUT request you should do
但是由于您已将Content-Type
标头设置为application/json
所以我认为在您的 PUT 请求中您应该这样做
response = requests.put(url, data=json.dumps(data), headers=headers)
that is send your data as json.
那就是将您的数据作为 json 发送。
回答by Marcus Müller
The problem is that you try to assign data
to the data
element in your dictionary:
问题是您尝试分配data
给data
字典中的元素:
headers = { ..., data:data }
That can't work because you can't use a dictionary as a key in a dictionary (technically, because it's not hashable).
这是行不通的,因为您不能将字典用作字典中的键(从技术上讲,因为它不可散列)。
You probably wanted to do
你可能想做
headers = { ..., "data":data }