Otro cliente de Routeros API Delphi. Admite API a través del método de inicio de sesión de API TLS y Routeros 6.43+.
Documentación oficial de la API: https://wiki.mikrotik.com/wiki/manual:api
Tema del foro Mikrotik: https://forum.mikrotik.com/viewtopic.php?f=9&t=31555
Esta es una implementación del cliente API de Mikrotik Routeros para Delphi. Admite la ejecución de solicitudes paralelas a un enrutador y tiene una interfaz de base de datos para facilitar el uso.
La unidad Routerosapi contiene la definición de dos clases que necesita para trabajar con el protocolo API de sus programas Delphi.
Esta clase encapsula las propiedades y métodos para establecer una conexión a un enrutador a través del protocolo de la API de Routeros.
Esta función se conecta al enrutador y realiza el procedimiento de inicio de sesión. Devuelve verdadero si el inicio de sesión fue exitoso, falso de lo contrario.
Hace una consulta al enrutador. La solicitud es una variedad de cadenas, primero es el comando y otros son parámetros. Si GetAllaFterQuery es verdadero , entonces Trosapiresult.getall se ejecuta después de enviar una consulta.
Si no necesita recibir ninguna salida de su consulta, use este método. Simplemente llama a la función de consulta y libera el objeto devuelto.
Con esta propiedad puede establecer el valor de tiempo de espera para las operaciones de red (en milisegundos).
Esta propiedad de solo lectura contiene una descripción textual del último error ocurrido.
Se desconecta del enrutador.
Esta clase le brinda la capacidad de trabajar con los datos devueltos de las consultas. Cada ejecución de comando está "aislada" en su objeto Trosapiresult , por lo que puede hacer solicitudes paralelas llamando a TrosapiClient.Query y recibiendo varios objetos Trosapiresult .
Devuelve el valor del parámetro de nombre ( palabra en términos de API) en la oración actual. La forma preferida de obtener el resultado es lo siguiente: apiresult ['parmname'] en lugar de apiresult.valueByName ('parmname') . Puede usar el nombre de Param con y sin liderazgo '=' carácter ( apiresult ['dirección'] y apiresult ['= dirección'] devuelve el mismo resultado).
Devuelve la oración actual del resultado de la consulta (el tipo es Trosapisentence).
Recibe una oración del enrutador. Si el parámetro de espera es verdadero , la función esperará hasta que se reciba la oración. Si la espera es falsa y no se recibieron oraciones por ahora, la función devuelve falso . Esto es útil al ejecutar comandos infinitos (como 'escuchar') en la GUI, cuando necesita procesar las acciones de otros usuarios: debe llamar periódicamente a Getone con WAIT = FALSE , y en caso de resultado negativo, simplemente haga algo más por un tiempo.
Recibe todas las oraciones hasta '! Hecho', luego devuelve verdadero (o falso en caso de un tiempo de espera).
Devuelve el número de oraciones recibidas después de llamar a Getall .
Devuelve verdadero si hay más oraciones en el resultado de la consulta.
Devuelve verdadero si hubo trampas durante Getall
Devuelve verdadero si se recibió la oración '! Hecha' en Getone
Cambia a la siguiente oración recibida en Getall
Cancela la ejecución del comando actual.
La aplicación de muestra de APITEST se puede descargar en la sección Lanzamientos: https://github.com/chupaka/delphi-routeros-api/releases
Al principio, debemos declarar una variable y crear una instancia de TrosapiClient :
var
RouterOS: TRosApiClient;
RouterOS := TRosApiClient.Create;Ahora nos conectamos al enrutador y realizamos el procedimiento de inicio de sesión:
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 ;Todas las consultas se realizan llamando a la función de consulta de TrosapiClient . Devuelve una instancia de Trosapiresult de la que se obtienen todos los datos.
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;Primero, coloque un temporizador en el formulario y fírelo tmrlisten , establecido habilitado para falso . Luego hacemos una consulta y habilitamos el temporizador:
ResListen := ROS.Query([ ' /log/listen ' ], False);
tmrListen.Enabled := True;Luego verificamos los datos nuevos sobre el evento del temporizador:
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 ;Para discusiones y sugerencias, puede consultar el Cliente de Delphi de la API del hilo del hilo del foro de Mikrotik