PUT запрос на REST API с использованием Python
по какой-то причине мой запрос 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)
вот ошибка, которую я получаю.
Traceback (most recent call last):
line 17, in <module>
headers = {'Authorization': 'Bearer ' + token, "Content-Type": "application/json", data:data}
TypeError: unhashable type: 'dict'
2 ответов
синтаксическая ошибка из-за =
войдите в ваш 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
запрос?
Edit:
как вы отредактировали вопрос, и теперь вы отправляете данные как тело запроса PUT requests.put(data=data)
таким образом, в заголовках нет необходимости. Просто измените заголовки на:
headers = {'Authorization': 'Bearer ' + token, "Content-Type": "application/json"}
но как вы установили свой до application/json
поэтому я думаю, что в вашем запросе вы должны сделать
response = requests.put(url, data=json.dumps(data), headers=headers)
это отправляет ваши данные как json.
проблема в том, что вы пытаетесь назначить data
до data
элемент в словарь:
headers = { ..., data:data }
это не может работать, потому что вы не можете использовать словарь в качестве ключа в словаре (технически, потому что он не хэшируется).
вы, вероятно, хотели сделать
headers = { ..., "data":data }