وثائق Discourse API تشير إلى "request body" لـ GET request

دالة GET تحتوي دائمًا على سلسلة استعلام (query string) ولا تحتوي أبدًا على بيانات POST (ولهذا السبب تحصل على خطأ “413 payload too large”، لأنها لا تتوقع أي بيانات). عند استرداد البيانات من الخادم دون إجراء أي تغيير، ستستخدم (تقريبًا) دائمًا GET وليس POST. لذلك يجب عليك استخدام params= بدلاً من data=.

أعتقد أن وثائق هذه المكالمة الخاصة لـ API صيغت بشكل سيئ (“Request Body schema” تشير حقًا إلى data في POST)، لذا سأقوم بنقل هذا الموضوع إلى 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...