HolodZhe Опубликовано 14 июля, 2017 Поделиться Опубликовано 14 июля, 2017 Здравствуйте, по какой-то не понятной причине не работает REST API. Вот по примеру делаю запрос: https://forum.demure-rp.ru/api/core/hello?key=082e2b893312d7c07e295bbadc55eb4c (API ключ не скрываю, т.к. он все равно тестовый, и форум в разработке только), но если вы перейдете по ссылке, то будет написано мол файл не найден, что делать? Ведь запрос правильно создан Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
WOLF Опубликовано 14 июля, 2017 Поделиться Опубликовано 14 июля, 2017 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
HolodZhe Опубликовано 14 июля, 2017 Автор Поделиться Опубликовано 14 июля, 2017 1 час назад, WOLF сказал: Ни 1, ни 2 тема не отражает сути моей проблемы, вообще никак. У меня при переходе, пишет что якобы файл не найден, хотя это API и папка api у меня есть. Понял, проблема решена. Со строками не работает, нужно именно скрипт) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
HolodZhe Опубликовано 14 июля, 2017 Автор Поделиться Опубликовано 14 июля, 2017 А нет, проблема не решена. Ну сделал я скрипт, по примерам, но все равно, файл не найден! Код: <?php $communityUrl = 'https://forum.demure-rp.ru/'; $apiKey = '082e2b893312d7c07e295bbadc55eb4c'; $curl = curl_init( $communityUrl . 'api/core/hello' ); curl_setopt_array( $curl, array( CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_HTTPAUTH => CURLAUTH_BASIC, CURLOPT_USERPWD => "{$apiKey}:" ) ); $response = curl_exec( $curl ); echo $response; Файл распологается по следующему пути: api.demure-rp.ru -> папка forum -> hello.php (http://api.demure-rp.ru/forum/hello.php), если просто в hello.php написать например "hello world", тогда отобразится все... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
HolodZhe Опубликовано 14 июля, 2017 Автор Поделиться Опубликовано 14 июля, 2017 Вот что в логах на сервере нашел: File does not exist: /home/users/d/demure-rp/domains/forum.demure-rp.ru/api/core По логам видно что нету в папке api (на форуме), нету файла (или же опять папки) core. Захожу в папку форума -> api, а там один файл index.php, это почему так? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
HolodZhe Опубликовано 14 июля, 2017 Автор Поделиться Опубликовано 14 июля, 2017 Все разобрался, тему можно закрыть! Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
HOLPER Опубликовано 8 января, 2019 Поделиться Опубликовано 8 января, 2019 А я вот что-то не разберусь. При попытке включить API выдаёт ошибку: Что она означает не понятно, в гугле по этой ошибке только два результата, в которых проблема не раскрыта. Предполагаю, что форум не видит файл .htaccess, но что ему мешает... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Desti Опубликовано 8 января, 2019 Поделиться Опубликовано 8 января, 2019 23 минуты назад, HOLPER сказал: но что ему мешает... nginx, наверное? или апач установлен? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
siv1987 Опубликовано 8 января, 2019 Поделиться Опубликовано 8 января, 2019 Создать API ключ в REST & OAuth -> Api keys Выполнить запрос согласно документации. Если на форуме включен Rewrite ссылок, то запрос нужно выполнять без index.php - /api/core/hello?key=mykey Если реврайта нету, то /api/index.php?/core/hello&key=mykey Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Desti Опубликовано 8 января, 2019 Поделиться Опубликовано 8 января, 2019 3 минуты назад, siv1987 сказал: Создать API ключ в REST & OAuth -> Api keys Не даст, пока не исчезнет красная надпись об ошибке. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
siv1987 Опубликовано 8 января, 2019 Поделиться Опубликовано 8 января, 2019 Отключить "Rewrite URLs? " Создать API ключ. Включить "Rewrite URLs" Выполнить запрос с /api/index.php?/ ???? Ах, да. Профит! Или разобраться как устроен реврайт на сервере. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Desti Опубликовано 8 января, 2019 Поделиться Опубликовано 8 января, 2019 У мну nginx, предложенный вариант не работает, нет нужной локации с авторизацией. Дальше пока не разбирался. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
siv1987 Опубликовано 8 января, 2019 Поделиться Опубликовано 8 января, 2019 Не совсем понимаю что значит "локация с авторизацией", но у меня Apache, использую настройку Rewrite Url но .htaccess удалил, предложный выше вариант работает. Не знаю, может в Nginx по другому происходит обработка адресов типа "query string with path". Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Desti Опубликовано 8 января, 2019 Поделиться Опубликовано 8 января, 2019 11 минут назад, siv1987 сказал: Не совсем понимаю что значит "локация с авторизацией", ну как бы RewriteRule .* index.php [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] А это означает, что используется встроенная серверная HTTP авторизация. Я пока не разобрался до конца. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
siv1987 Опубликовано 8 января, 2019 Поделиться Опубликовано 8 января, 2019 Какбэ да, но проблем с бейсик авторизации в nginx вроде нету. В любом случае ключ можно передать и get параметром key. В документации есть пример такого запроса. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Desti Опубликовано 8 января, 2019 Поделиться Опубликовано 8 января, 2019 Идем в файл applications/core/modules/admin/applications/api.php Находим catch ( \Exception $e ) { \IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack('menu__core_applications_api'); \IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'api' )->htaccess( isset( \IPS\Request::i()->recheck ), $url ); return; } и комментируем return; После этого грязнейшего хака попадаем в возможность настроить ключи. Идем в конфиг nginx и в блок server{} своего форума добавляем location /api/ { auth_basic "auth"; auth_basic_user_file /home/htpasswd; index index.php; try_files $uri $uri/ /api/index.php?$args; } Затем, используя утилиту htpasswd из apache2-utils (apt-get install apache2-utils) создаем пароль для ограничения доступа. $ htpassdw /home/htpasswd username Вводим пароль, создается файл паролей. Перегружаем nginx. Всё, идем в ACP -> Rest api, создаем ключ, открываем браузер, вводим //site/api/core/hello?key=<ваш API ключ>, наслаждаемся результатом. У меня получилось, чего и вам желаю. Вот правильный ответ сервера на команду hello: { "communityName": "Invision Community", "communityUrl": "http:\/\/dev.microsoft.ru\/", "ipsVersion": "4.3.6" } Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Desti Опубликовано 8 января, 2019 Поделиться Опубликовано 8 января, 2019 Совсем забыл.. Чтобы получилось совсем по феншую, надо передавать в параметрах авторизации не произвольное имя, а ключ API. То есть: $ htpassdw /home/htpasswd <ваш ключ API> Вводим пароль, который будем использовать, чтобы всякие хацкеры не лазили. В поле авторизации вводим ключ, пароль и сразу попадаем в нужное место уже без ключа. Ну или в своем коде делаем запрос в виде $key="ваш api ключ"; $pass = "1234rrr"; var_dump( \IPS\Http\Url::external( $url . "api/core/hello" )->request()->login( $key, "" )->get()->decodeJson() ); Вместо кавычек - $pass. айте мне уже право на редактирование ) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
siv1987 Опубликовано 8 января, 2019 Поделиться Опубликовано 8 января, 2019 1 час назад, Desti сказал: Всё, идем в ACP -> Rest api, создаем ключ, открываем браузер, вводим //site/api/core/hello?key=<ваш API ключ>, наслаждаемся результатом. Если ключ передается обычным get параметром как в этом примере, конфигурировать как-то nginx не требуется.Desti вы пошли каким-то сложным путем. Мне кажется вся проблема из-за того, что на форуме включен Rewrite Url и ссылка на тест api генерируется без index.php. Тут нужно либо просто настроить реврайт в nginx или htaccess (в зависимости от сервера), либо временно, если нет возможности править конфиг, отключить Rewrite URL's на форуме, получить ключ и включить его обратно. Ничего с форумом за это короткое время не случится. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Desti Опубликовано 8 января, 2019 Поделиться Опубликовано 8 января, 2019 5 минут назад, siv1987 сказал: отключить Rewrite URL's на форуме, получить ключ не работает этот путь. Что с включенным, что с выключенным, не пропускает дальше красной надписи. Лезть в кишочки лень, заработало и хорошо. Этот реврайт вообще кривой, как и весь ipb, у меня два идентичных сервера, на одном админка кажет красную надпись "реврайт не работает, звони бородатому админу", на другом не пишет. Конфиги идентичны вплоть до комментов 6 минут назад, siv1987 сказал: Если ключ передается обычным get параметром как в этом примере, конфигурировать как-то nginx не требуется. Но это небезопасно. А конфигурировать в любом случае придется, локации /api/ по умолчанию нет. Не надо будет ставить auth - да. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
HOLPER Опубликовано 8 января, 2019 Поделиться Опубликовано 8 января, 2019 У меня проблема оказалась в ограничениях на хостинге, добавленных после ddos'а, на скрипты и количество запросов. Без них всё заработало. Не ожидал такого отклика, спасибо за помощь. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.