別のRouteros API Delphiクライアント。 TLSおよびRouteros 6.43+ APIログインメソッドを介したAPIをサポートします。
公式APIドキュメント:https://wiki.mikrotik.com/wiki/manual:api
Mikrotik Forumトピック:https://forum.mikrotik.com/viewtopic.php?f=9&t=31555
これは、DelphiのMikrotik Routeros APIクライアントの実装です。ルーターへの並列リクエストの実行をサポートし、使いやすいためにデータベースのようなインターフェイスを備えています。
Routerosapiユニットには、DelphiプログラムからAPIプロトコルを操作する必要がある2つのクラスの定義が含まれています。
このクラスは、Routeros APIプロトコルを介してルーターに接続するためのプロパティと方法をカプセル化します。
この関数はルーターに接続し、ログイン手順を実行します。ログインが成功した場合、それ以外の場合はfalseを返します。
ルーターにクエリを作成します。リクエストは一連の文字列であり、最初はコマンドであり、他の文字列はパラメーターです。 GetAllafterQueryが真である場合、クエリを送信した後、 TrosapireSult.getAllが実行されます。
クエリから出力を受信する必要がない場合は、この方法を使用してください。単にクエリ関数を呼び出し、返されたオブジェクトをFREESします。
このプロパティを使用すると、ネットワーク操作のタイムアウト値(ミリ秒単位)を設定できます。
この読み取り専用プロパティには、最後に発生したエラーのテキストの説明が含まれています。
ルーターから切断します。
このクラスは、クエリから返されたデータを使用して作業することができます。各コマンドの実行は、 Trosapiresultオブジェクトで「分離」されるため、 Trosapiclient.Queryを呼び出し、いくつかのTrosapireSultオブジェクトを受信して、並行リクエストを実行できます。
現在の文の名前パラメーター(APIの観点から単語)の値を返します。結果を取得する好ましい方法は次のとおりです。Apiresult.ValueByname ( 'parmname')の代わりに、 apiresult ['parmname'] 。 '='文字( apiresult ['address']およびapiresult ['= address']が同じ結果を返す、またはlidedの両方でパラメーション名を使用できます。
クエリ結果の現在の文を返します(タイプは微量です)。
ルーターから1つの文を受け取ります。待機パラメーターがtrueの場合、機能は文が受信されるまで待機します。待機が偽で、今のところ文が受け取られていない場合、関数はfalseを返します。これは、GUIでInfiniteコマンド(「聞く」など)を実行し、他のユーザーのアクションを処理する必要がある場合に役立ちます。定期的にwait = falseでgetoneを呼び出す必要があります。
「!done」まですべての文を受け取り、 true (またはタイムアウトの場合はfalse )を返します。
Getallを呼び出した後、受け取った文の数を返します。
クエリの結果にもっと文がある場合、 trueを返します。
GetAll中にトラップがあった場合、 trueを返します
getoneで「!done」文が受信された場合、 trueを返します
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フォーラムスレッドRouteros API Delphiクライアントを確認できます