Quel est le `content-type` correct lors de la modification des publications ?

@pedroleaoc voici un petit script Python d’exemple qui montre comment effectuer des requêtes authentifiées et comment envoyer les données de la requête pour les requêtes PUT/POST.

# discourse-api-demo.py
import requests
from requests.structures import CaseInsensitiveDict

# Requête GET de base vers une URL publique, aucun en-tête nécessaire.
url = "http://localhost:3000/posts/10.json"

resp = requests.get(url)

print(resp.status_code)
print(resp.content)

# Requête GET vers un point de terminaison privé. Des en-têtes d'authentification sont nécessaires.
url = "http://localhost:3000/admin/users/list/active.json"
headers = {'Api-Username': 'system', 'Api-Key': '5c1c57915e2...'}
resp = requests.get(url, headers=headers)

print(resp.status_code)
print(resp.content)

# Requête PUT avec un corps de requête
url = "http://localhost:3000/posts/10.json"
data = { 'raw': "Superbe message, mais voici une mise à jour du corps du message", 'edit_reason': "J'ai modifié cela parce que je le peux." }

resp = requests.put(url, headers=headers, json=data)
print(resp.status_code)
print(resp.content)

Depuis Quickstart — Requests 2.33.1 documentation

Au lieu d’encoder vous-même le dict, vous pouvez également le passer directement en utilisant le paramètre json (ajouté dans la version 2.4.2) et il sera encodé automatiquement :

url = 'https://api.github.com/some/endpoint' >>> payload = {'some': 'data'} >>> r = requests.post(url, json=payload)

Notez que le paramètre json est ignoré si data ou files est passé.

L’utilisation du paramètre json dans la requête modifiera le Content-Type dans l’en-tête en application/json.