web-dev-qa-db-fra.com

PUT Demande à REST API utilisant Python

Pour une raison quelconque, ma demande de vente ne fonctionne pas et je reçois des erreurs de syntaxe. Je ne connais pas encore Python, mais mes requêtes GET et POST fonctionnent. Quelqu'un voit-il quelque chose qui ne va pas avec cette demande et ses recommandations? J'essaie de changer la description en "Description modifiée"

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)

Voici l'erreur que je reçois.

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

Erreur de syntaxe en raison de la connexion = dans votre dictionnaire headers:

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

CA devrait etre:

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

Voir data=data est modifié avec 'data':data. Citations du côlon et simples.

Et êtes-vous sûr de vouloir envoyer des données dans vos en-têtes? Ou vous devriez remplacer votre payload par data dans votre demande put?

Modifier:

Comme vous avez modifié la question et que vous envoyez maintenant des données en tant que corps requests.put(data=data) de la requête PUT, il n’est pas nécessaire de les utiliser dans les en-têtes. Il suffit de changer vos en-têtes pour:

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

Mais comme vous avez défini votre en-tête Content-Type sur application/json, vous devriez le faire dans votre requête PUT.

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

c'est envoyer vos données en json.

5
Muhammad Tahir

Le problème est que vous essayez d'affecter data à l'élément data de votre dictionnaire:

headers = { ..., data:data }

Cela ne peut pas fonctionner parce que vous ne pouvez pas utiliser un dictionnaire comme clé dans un dictionnaire (techniquement, parce que ce n'est pas obligatoire).

Tu voulais probablement faire

headers = { ..., "data":data }
1
Marcus Müller