Когда я выполняю этот вызов, Discourse отвечает мне {locked: false}.
Я попробовал заблокировать пост вручную и проанализировал вызов API, который делает клиент Discourse. Он выглядит очень похоже на тот, что я делаю из моего приложения, за исключением, возможно, метода аутентификации.
Не уверен, что происходит. Есть какие-нибудь идеи?
Я не вижу очевидной проблемы. Вы получили это, следуя руководству Как провести реверс-инжиниринг API Discourse? Именно так я бы поступил, чтобы помочь, если бы был за компьютером.
API для блокировки поста документирована здесь Discourse API Docs, но да, я также пытался реверс-инжинирить то, как это делает клиент Discourse, и это выглядит очень похоже на то, как я делаю это из своего приложения.
Это означает, что вам нужно отправлять "locked": "true", а не "locked": true, и что документацию или код необходимо обновить, чтобы отразить или изменить такое поведение.
Браузер не отправляет JSON-запрос, он отправляет Content-Type: application/x-www-form-urlencoded, который интерпретирует параметр как строку, и именно поэтому это работает в браузере.