另一個Routeros API Delphi客戶端。支持TLS和Routeros 6.43+ API登錄方法的API。
官方API文檔:https://wiki.mikrotik.com/wiki/manual:api
Mikrotik論壇主題:https://forum.mikrotik.com/viewtopic.php?f=9&t=31555555555
這是Delphi的Mikrotik Routeros API客戶端的實現。它支持對路由器的並行請求執行,並具有類似數據庫的接口以易於使用。
RouteroSAPI單元包含兩個類的定義,您需要從Delphi程序中使用API協議。
該類封裝了通過Routeros API協議與路由器建立連接的屬性和方法。
此功能連接到路由器並執行登錄過程。如果登錄成功,它將返回True ,否則為錯誤。
對路由器進行查詢。請求是一系列字符串,首先是命令,而其他是參數。如果GetAllafterQuery為True ,則發送查詢後將執行trosapiresult.getall 。
如果您不需要從查詢中收到任何輸出,請使用此方法。它只是調用查詢功能,然後釋放返回的對象。
使用此屬性,您可以為網絡操作(以毫秒)設置超時值。
此僅閱讀屬性包含發生最後錯誤的文本描述。
與路由器斷開連接。
該課程使您有能力與查詢返回的數據一起工作。每個命令執行都是在其trosapiresult對像中“隔離”的,因此您可以通過調用trosapiclient.Query並接收幾個trosapiresult對象來進行並行請求。
在當前句子中返回名稱參數的值(用API詞)。獲得結果的首選方法是: apiresult ['parmname']而不是apiresult.valuebyname('parmname') 。您可以使用和不帶有領先的'='字符( apiresult ['advery']和apiresult ['= address']返回相同結果)。
返回查詢結果的當前句子(類型為trosabisentence)。
從路由器收到一句話。如果等待參數為真,函數將等到收到句子。如果等待是錯誤的,並且目前沒有收到句子,則功能返回false 。當您需要處理其他用戶的操作時,當在GUI中執行無限命令(例如'listing')時,這很有幫助:您應該定期用wait = false調用getone ,如果否定結果,則只需暫時做其他事情即可。
接收到“!完成”的所有句子,然後返回true (或在超時的情況下)。
致電Getall後返回接收句子的數量。
如果查詢結果中有更多句子,則返回true 。
如果在GetAll期間有陷阱,則返回為True
如果在Getone中收到了“!完成”句子,返回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客戶端