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 }