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

GET hat immer eine Query-String und niemals Post-Daten (deshalb erhalten Sie 413 Payload zu groß, es erwartet keine). Wenn Sie Daten von einem Server abfragen, ohne eine Änderung vorzunehmen, verwenden Sie (fast) immer GET und nicht POST. Sie sollten also 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), daher verschiebe ich dies zu 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><h2><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...
5 „Gefällt mir“