الحصول على ["BAD CSRF"] عند تحديث الموضوع عبر API [python]

مرحباً أيها الأصدقاء، أواجه مشاكل في تحديث موضوع. أستطيع الحصول على id للمنشور الأول كما هو موضح هنا. وقد تم تأكيد ذلك بتشغيل الكود التالي:

import requests
from requests.structures import CaseInsensitiveDict

url = "https://my/discourse/instance/posts/{post_id}.json"

headers = CaseInsensitiveDict()
headers["Authorization"] = "{\"api-key\": \"{le_api_key}\", \"api-username\": \"{le_username}\"}"

resp = requests.get(url, headers=headers)

print(resp.status_code)

والذي يعيد رمز حالة 200 والمعلومات المتوقعة حول المنشور.

لكن عندما أحاول:

import requests
from requests.structures import CaseInsensitiveDict

url = "https://my/discourse/instance/posts/{post_id}.json"

headers = CaseInsensitiveDict()
headers["Authorization"] = "{\"api-key\": \"le_api_key\", \"api-username\": \"le_username\"}"
headers["Content-Type"] = "application/json"

data = """
{
  "post": {
      "raw": "منشور رائع، ولكن هنا تحديث لمحتوى المنشور",
      "edit_reason": "لقد قمت بالتغيير لأنني أستطيع ذلك."
   }
}
"""

resp = requests.put(url, headers=headers, data=data)

print(resp.status_code)

أحصل على:
["BAD CSRF"]

أنا مسؤول (Admin) ومفتاحي هو global. أود مثلاً تشغيل هذا باستخدام مفتاح أقل صلاحيات.
هذا المنشور هو الأول والوحيد في موضوع قمت بإنشائه عبر واجهة برمجة التطبيقات (API).

شكراً جزيلاً مقدماً :slight_smile:

لماذا تقوم بتضمين الرؤوس تحت مفتاح القاموس هذا Authorization؟ هذا غير موثق في Discourse REST API Documentation :thinking:

إعجابَين (2)

أنت محق، هذا شيء يقوم به الأداة التي أستخدمها لاختبار الـ API، وهو يعمل، ويبدو أن المشكلة تكمن في ذلك بحد ذاته:

header1 = CaseInsensitiveDict()
header1["Authorization"] = '{"api-key": "longapikey", "api-username": "myusername"}'

header2 = {"api-key": "longapikey", "api-username": "myusername"}

r = requests.get(url, headers= HEADER)

عندما يكون HEADER يساوي header1، يعمل الأمر، وعندما يكون يساوي header2، أحصل على:

{"errors":["ليس لديك إذن لعرض المورد المطلوب. اسم المستخدم أو المفتاح غير صالح."],"error_type":"invalid_access"}

شكرًا لك على ردك على أي حال!