Documentação da API do Discourse menciona um "corpo de solicitação" para uma solicitação GET

GET sempre tem uma string de consulta e nunca tem dados de postagem (é por isso que você está recebendo 413 payload too large, ele não espera nada). Ao consultar dados de um servidor sem fazer uma alteração, você (quase) sempre usará GET e não POST. Portanto, você deve usar params= em vez de data=.

Acho que a documentação para esta chamada de API específica está mal formulada (“Request Body schema” realmente indica POST data), então estou movendo isso para Bug e você não precisa me pagar nada.

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 curtidas