Метод GET всегда содержит строку запроса (query string) и никогда не содержит данных тела запроса (post data) (именно поэтому вы получаете ошибку 413 Payload Too Large: сервер не ожидает получения данных). При запросе данных с сервера без внесения изменений вы почти всегда будете использовать метод GET, а не POST. Поэтому вам следует использовать параметр params=, а не data=.
Я думаю, что документация к этому конкретному вызову API сформулирована неудачно (“Request Body schema” на самом деле указывает на использование POST data), поэтому я переношу эту тему в раздел Contribute > Bug, и вам не нужно мне ничего платить.
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...