GET-Anfragen enthalten immer eine Query-String und niemals Post-Daten (deshalb erhalten Sie den Fehler 413 „Payload zu groß“, da keine Daten erwartet werden). Wenn Sie Daten von einem Server abfragen, ohne Änderungen vorzunehmen, verwenden Sie (fast) immer GET und nicht POST. Daher sollten Sie params= anstelle von data= verwenden.
Ich denke, die Dokumentation für diesen spezifischen API-Aufruf ist schlecht formuliert („Request Body schema“ deutet wirklich auf POST data hin), also verschiebe ich dies nach Contribute > Bug und Sie müssen mir nichts bezahlen.
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...