GET inclut toujours une chaîne de requête et ne contient jamais de données POST (c’est pourquoi vous obtenez une erreur 413 « payload trop volumineux », car la méthode n’attend aucune donnée). Lorsque vous interrogez des données sur un serveur sans effectuer de modification, vous utiliserez (presque) toujours GET et non POST. Vous devriez donc utiliser params= au lieu de data=.
Je pense que la documentation de cet appel API spécifique est mal formulée (« Request Body schema » indique clairement une requête POST avec data), je transfère donc ce signalement vers Contribute > Bug et vous n’avez pas besoin de me payer.
import requests
import json
def get_post_from_topic(topic_id, post_id):
endpoint = f"https://forum.example.com/t/{topic_id}/posts.json"
api_username = 'system'
api_key = 'REDACTED'
headers = {
"Content-Type": "application/json",
"Api-Key": api_key,
"Api-Username": api_username,
}
params = {
"post_ids[]": post_id
}
response = requests.get(endpoint, headers=headers, params = params)
if response.status_code == 200:
return response
response = get_post_from_topic(6,8)
print(response.json())
{"post_stream": {"posts": [{"id": 8, "name": "system", "username": "system", "avatar_template": "/images/discourse-logo-sketch-small.png", "created_at": "2022-06-26T04:44:23.637Z", "cooked": "<p><a name=\"collect\"></a></p>\n<h2>\n<a name=\"what-information-do-we-collectcollect-1\" class=\"anchor\" href=\"#what-information-do-we-collectcollect-1\"></a><a href=\"#collect\">What information do we collect...