Другой клиент API Delphi API Routeros. Поддерживает API над TLS и маршрутизатором 6.43+ Метод входа в систему API.
Официальная документация по API: https://wiki.mikrotik.com/wiki/manual:api
Mikrotik Forum Тема: https://forum.mikrotik.com/viewtopic.php?f=9&t=31555
Это реализация Mikrotik Routeros API -клиента для Delphi. Он поддерживает выполнение параллельных запросов на маршрутизатор и имеет интерфейс, похожий на базу данных для простоты использования.
Блок Routerosapi содержит определение двух классов, которые вам необходимо работать с протоколом API из ваших Delphi -программ.
Этот класс инкапсулирует свойства и методы для подключения к маршрутизатору с помощью протокола API Routeros.
Эта функция подключается к маршрутизатору и выполняет процедуру входа в систему. Это возвращает True, если вход был успешным, иначе ложным .
Делает запрос на маршрутизатор. Запрос - это массив струн, первым является команда, а другие - параметры. Если GetallafterQuery верен , то Trosapiresult.getall выполняется после отправки запроса.
Если вам не нужно получать какие -либо выводы от вашего запроса, используйте этот метод. Он просто вызывает функцию запроса и освобождает возвращаемый объект.
С помощью этого свойства вы можете установить значение тайм -аута для сетевых операций (в миллисекундах).
Это свойство только для чтения содержит текстовое описание последней ошибки.
Отключается от маршрутизатора.
Этот класс дает вам возможность работать с данными, возвращаемыми из запросов. Каждое выполнение команды «изолировано» в своем объекте Trosapiresult , поэтому вы можете выполнять параллельные запросы, вызывая Trosapiclient.Query и получая несколько объектов Trosapiresult .
Возвращает значение параметра имени ( слово в терминах API) в текущем предложении. Предпочтительным способом получить результат является следующим: apiresult ['parmname'] вместо apiresult.valuebyname ('parmname') . Вы можете использовать имя параметра как с лидером '=' символом ( apiresult ['address'] и apiresult ['= адрес'] возвращать один и тот же результат).
Возвращает текущее предложение результата запроса (тип является Trosapisentence).
Получает одно предложение от маршрутизатора. Если параметр ожидания правда , функция будет ждать, пока не будет получено предложение. Если подождите ложно , и пока не было получено предложения, функция возвращает ложь . Это полезно при выполнении бесконечных команд (например, «прослушивание») в графическом интерфейсе, когда вам нужно обрабатывать действия другого пользователя: вы должны периодически звонить GetOne с wait = false , и в случае негативного результата просто делать что -то еще на время.
Получает все предложения до '! Dode', затем возвращает True (или ложь в случае тайм -аута).
Возвращает количество полученных предложений после вызова Getall .
Возвращает True, если в результате запроса есть больше предложений.
Возвращает правду , если бы были ловушки (ы) во время Getall
Возврат правда, если '! Готово' предложение было получено в Getone
Переключается на следующее предложение, полученное в Getall
Отменяет текущее выполнение команды.
Пример приложения Apitest можно загрузить в раздел «Выпуски: https://github.com/chupaka/delphi-routeros-api/releases
Сначала мы должны объявить переменную и создать экземпляр Trosapiclient :
var
RouterOS: TRosApiClient;
RouterOS := TRosApiClient.Create;Теперь мы подключаемся к маршрутизатору и выполняем процедуру входа в систему:
if RouterOS.Connect( ' 192.168.0.1 ' , ' admin ' , ' password ' ) then
begin
// we are connected successfully
end
else
begin
// an error occured; text error message is in LastError property
end ;Все запросы выполняются путем вызова функции запроса TrosapicLient . Он возвращает экземпляр Trosapiresult , из которого все данные извлекаются.
var
Res: TRosApiResult;
Res := RouterOS.Query([ ' /system/resource/print ' ], True);Res := ROS.Query([ ' /ip/arp/print ' , ' ?interface=ether2 ' ], True);
while not Res.Eof do
begin
SomeProcessingFunction(Res[ ' .id ' ], Res[ ' address ' ]);
Res.Next;
end ;
Res.Free;Во -первых, поместите таймер на форму и назвайте его tmrListen , установите включен в False . Затем мы делаем запрос и включим таймер:
ResListen := ROS.Query([ ' /log/listen ' ], False);
tmrListen.Enabled := True;Затем мы проверяем новые данные о событии таймера:
procedure TForm1.tmrListenTimer (Sender: TObject);
begin
repeat
if not ResListen.GetOne(False) then Break;
if ResListen.Trap then
begin
ShowMessage( ' Trap: ' + ROS.LastError);
Break;
end ;
if ResListen.Done then
begin
ShowMessage( ' Done ' );
ResListen.Free;
tmrListen.Enabled := False;
Break;
end ;
Memo1.Lines.Add(ResListen[ ' time ' ] + ' : ' + ResListen[ ' message ' ]);
until False;
end ;Для обсуждения и предложений вы можете проверить Mikrotik Forum Thread Routeros API Delphi Client