Нужна помощь в обновлении информации профиля через API

Я нашёл несколько примеров в этих форумах по обновлению информации о пользователе через API, но не могу заставить их работать. Я начинающий разработчик, возможно, я упускаю что-то очевидное.

Сначала я попытался запустить этот пример:
curl -X PUT -d 'name=new name' -L 'https://mysite.com/users/user12345.json?api_key=mykey&api_username=username'

но получил [“BAD CSRF”], поэтому я попробовал это:

curl -X PUT \
  -H "Content-Type: multipart/form-data" \
  -H "Api-Key: mykey" \
  -H "Api-Username: username" \
  -d '{"name": "new name"}' \
  -L 'https://mysite.com/users/user12345.json'

Это возвращает “success”:“OK”, за которым следует весь JSON для пользователя, но фактического обновления не происходит.

Что я упускаю?

Кстати: можно ли обновить имя пользователя тем же способом?

Спасибо за помощь.

Да, этот способ устарел в пользу передачи учётных данных в заголовке (как показано ниже).

Вы перепутали кавычки: " и . Возможно, это и есть причина. :thinking:

Спасибо, @Arkshine. Я убедился, что все кавычки одинаковые ", но всё равно не работает.

Не могу понять, в чём проблема.

Вы пробовали перейти по ссылке Reverse engineer the Discourse API, чтобы проверить, что происходит, когда вы используете интерфейс для внесения изменений?

У меня это работает при отправке PUT-запроса, например, на /u/test_one.json

Спасибо, @JammyDodger. Я сделал так, как вы посоветовали: обновил имя в административном интерфейсе и затем проверил вкладку Network. Как вы и упоминали, обновление происходит по другому URL (/u вместо /users), но даже при изменении URL это всё равно не работает.

В разделе “Form Data” я вижу запрос: name: "newname", точно так же, как я его отправляю.

Насколько я могу судить, всё выглядит правильно, но обновление всё равно не происходит. В тупике.

Хорошо… Я потратил гораздо больше времени на изучение форумов и нашел похожую проблему семилетней давности. Оказалось, что если обновить заголовок Content-Type до “application/json; charset=utf-8”, всё заработает!

У меня остался один вопрос: как обновить имя пользователя через API?

Я пробовал сделать что-то вроде этого, но это не работает:

-d '{"name": "новое имя", "username": "новое имя пользователя"}' \

Хорошо… Я наконец-то разобрался в этом. Оставлю краткое резюме здесь на случай, если кто-то в будущем будет искать, как это сделать. Другие ответы, которые я нашел на форумах, устарели.

Чтобы обновить имя через API:
curl -X PUT -H "Content-Type: application/json; charset=utf-8" -H "Api-Key: mykey" -H "Api-Username: username" -d '{"name": "mynewname"}' -L 'https://mysite.com/u/user12345.json'

Чтобы обновить имя пользователя через API:
curl -X PUT -H "Content-Type: application/json; charset=utf-8" -H "Api-Key: myapikey" -H "Api-Username: username" -d '{"new_username": "mynewusername"}' -L 'https://mysite.com/u/user12345/preferences/username.json'