Перейти к содержанию

Не работает REST API


Рекомендуемые сообщения

Здравствуйте, по какой-то не понятной причине не работает REST API.

Вот по примеру делаю запрос: https://forum.demure-rp.ru/api/core/hello?key=082e2b893312d7c07e295bbadc55eb4c (API ключ не скрываю, т.к. он все равно тестовый, и форум в разработке только), но если вы перейдете по ссылке, то будет написано мол файл не найден, что делать? Ведь запрос правильно создан

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, WOLF сказал:

 

 

Ни 1, ни 2 тема не отражает сути моей проблемы, вообще никак. У меня при переходе, пишет что якобы файл не найден, хотя это API и папка api у меня есть.

Понял, проблема решена. Со строками не работает, нужно именно скрипт)

Ссылка на комментарий
Поделиться на другие сайты

А нет, проблема не решена. Ну сделал я скрипт, по примерам, но все равно, файл не найден! Код:

<?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", тогда отобразится все...

Ссылка на комментарий
Поделиться на другие сайты

Вот что в логах на сервере нашел:

File does not exist: /home/users/d/demure-rp/domains/forum.demure-rp.ru/api/core

По логам видно что нету в папке api (на форуме), нету файла (или же опять папки) core.

Захожу в папку форума -> api, а там один файл index.php, это почему так? 

Ссылка на комментарий
Поделиться на другие сайты

Все разобрался, тему можно закрыть!

Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...

А я вот что-то не разберусь. При попытке включить API выдаёт ошибку:

image.thumb.png.c25e70dbaf3f48b0bd8a6943fd685bcc.png

Что она означает не понятно, в гугле по этой ошибке только два результата, в которых проблема не раскрыта. Предполагаю, что форум не видит файл .htaccess, но что ему мешает...

Ссылка на комментарий
Поделиться на другие сайты

23 минуты назад, HOLPER сказал:

но что ему мешает...

nginx, наверное? :) или апач установлен?

Ссылка на комментарий
Поделиться на другие сайты

Создать API ключ в REST & OAuth -> Api keys
Выполнить запрос согласно документации.
Если на форуме включен Rewrite ссылок, то запрос нужно выполнять без index.php  - /api/core/hello?key=mykey
Если реврайта нету, то /api/index.php?/core/hello&key=mykey

Ссылка на комментарий
Поделиться на другие сайты

3 минуты назад, siv1987 сказал:

Создать API ключ в REST & OAuth -> Api keys

Не даст, пока не исчезнет красная надпись об ошибке.

Ссылка на комментарий
Поделиться на другие сайты

Отключить "Rewrite URLs? "
Создать API ключ.
Включить "Rewrite URLs"
Выполнить запрос с /api/index.php?/
????
Ах, да. Профит!

Или разобраться как устроен реврайт на сервере.

Ссылка на комментарий
Поделиться на другие сайты

У мну nginx, предложенный вариант не работает, нет нужной локации с авторизацией.  Дальше пока не разбирался.

Ссылка на комментарий
Поделиться на другие сайты

Не совсем понимаю что значит "локация с авторизацией", но у меня Apache, использую настройку Rewrite Url но .htaccess удалил, предложный выше вариант работает. Не знаю, может в Nginx по другому происходит обработка адресов типа "query string with path".

Ссылка на комментарий
Поделиться на другие сайты

11 минут назад, siv1987 сказал:

Не совсем понимаю что значит "локация с авторизацией",

ну как бы 

RewriteRule .* index.php [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

А это означает, что используется встроенная серверная HTTP авторизация.  Я пока не разобрался до конца.

Ссылка на комментарий
Поделиться на другие сайты

Какбэ да, но проблем с бейсик авторизации в nginx вроде нету. В любом случае ключ можно передать и get параметром key.

В документации есть пример такого запроса.

Ссылка на комментарий
Поделиться на другие сайты

Идем в файл 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"
}

 

Ссылка на комментарий
Поделиться на другие сайты

Совсем забыл..

Чтобы получилось совсем по феншую, надо передавать в параметрах авторизации не произвольное имя, а ключ 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.

айте мне уже право на редактирование )

Ссылка на комментарий
Поделиться на другие сайты

 

1 час назад, Desti сказал:

Всё, идем в ACP -> Rest api, создаем ключ, открываем браузер, вводим //site/api/core/hello?key=<ваш API ключ>, наслаждаемся результатом.

Если ключ передается обычным get параметром как в этом примере, конфигурировать как-то nginx не требуется.

Desti вы пошли  каким-то сложным путем. Мне кажется вся проблема из-за того, что на форуме включен Rewrite Url и ссылка на тест api генерируется без index.php. Тут нужно либо просто настроить реврайт в nginx или htaccess (в зависимости от сервера), либо временно, если нет возможности править конфиг, отключить Rewrite URL's на форуме, получить  ключ и включить его обратно. Ничего с форумом за это короткое время не случится.

Ссылка на комментарий
Поделиться на другие сайты

5 минут назад, siv1987 сказал:

отключить Rewrite URL's на форуме, получить  ключ

не работает этот путь. Что с включенным, что с выключенным, не пропускает дальше красной надписи. Лезть в кишочки лень,  заработало и хорошо.  Этот реврайт вообще кривой, как и весь ipb, у меня два идентичных сервера, на одном админка кажет красную надпись "реврайт не работает, звони бородатому админу", на другом не пишет. Конфиги идентичны вплоть до комментов :)

6 минут назад, siv1987 сказал:

Если ключ передается обычным get параметром как в этом примере, конфигурировать как-то nginx не требуется.

Но это небезопасно. А конфигурировать в любом случае придется, локации /api/ по умолчанию нет. Не надо будет ставить auth - да. 

Ссылка на комментарий
Поделиться на другие сайты

У меня проблема оказалась в ограничениях на хостинге, добавленных после ddos'а, на скрипты и количество запросов. Без них всё заработало. Не ожидал такого отклика, спасибо за помощь.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...