Discourse API docs erwähnen einen "request body" für einen GET request

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...