alexcomp
(Alex comp)
02.Ноябрь.2022 08:26:09
1
Привет
Мне нужна ваша помощь, пожалуйста.
Я пытаюсь создать тему через API Discourse, но каждый раз это не удаётся. Вот мой код:
https://myDiscourse.com/posts.json?title=New+test+posted&raw=new+posted+text+to+test+creation+by+api&category=45&api_key=xxxxxxxxxxxxxxxxxxxxxxxx&api_username=admin
Не знаю, в чём проблема. Можете помочь, пожалуйста?
Спасибо
pfaffman
(Jay Pfaffman)
02.Ноябрь.2022 10:45:38
2
Нельзя включать API-ключ в URL (это раскрывает ваш ключ любому, кто может видеть ваш веб-трафик). Ключ должен передаваться в заголовках.
Смотрите пример по ссылке: Grant a custom badge through the API .
alexcomp
(Alex comp)
02.Ноябрь.2022 23:16:44
3
Привет, @pfaffman
Спасибо за вашу помощь. Я попробовал следовать примеру, но возникла ошибка:
401 Authorization Required
Мой скрипт:
$apikey = "xxxxxxxxxxxxxxxxxxxx";
$username = "xxxxxxxxxxxxxxxxx";
$title = "test";
$raw = "message";
$category = 9;
$url = 'https://myDiscourse.com/posts.json';
$post_fields = array(
'title' => $title,
'raw' => $raw,
'category' => $category,
);
$headers = array("Content-Type: multipart/form-data;","Api-Key: $apikey","Api-Username: $username",);
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_POST, 1 );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $post_fields ) );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec( $ch );
if ( curl_errno( $ch ) !== 0 ) {
echo 'Ошибка:' . curl_error($ch);
}
curl_close( $ch );
Я, наверное, допустил ошибку, но не знаю какую. Не могли бы вы мне помочь?
Спасибо
Спасибо за код. Полностью отладить его без просмотра всего кода сложно. Я бы рекомендовал выполнять запросы к API вне самого скрипта. Например, вы можете использовать curl:
curl -X GET "https://mydiscourse.com/posts.json" \
-H "Api-Key: 714552c6148e1617aeab526d0606184b94a80ec048fc09894ff1a72b740c5f19" \
-H "Api-Username: michael"
Если вам неудобно работать с командной строкой или использовать curl, я бы рекомендовал использовать Postman для отладки проблемы с API. Postman является незаменимым инструментом для меня как разработчика при тестировании или создании API.
Вот рабочая область Postman с уже настроенными маршрутами Discourse. Просто настройте свой API-ключ и имя пользователя.
Документация по API Discourse в сети API Postman