ไคลเอนต์ Routeros API Delphi อื่น รองรับ API ผ่านวิธีการเข้าสู่ระบบ TLS และ Routeros 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 ของคุณ
คลาสนี้ห่อหุ้มคุณสมบัติและวิธีการในการเชื่อมต่อกับเราเตอร์ผ่านโปรโตคอล Routeros API
ฟังก์ชั่นนี้เชื่อมต่อกับเราเตอร์และดำเนินการตามขั้นตอนการเข้าสู่ระบบ มันจะส่งคืน จริง ถ้าการเข้าสู่ระบบประสบความสำเร็จ เป็นเท็จ เป็นอย่างอื่น
สร้างคำถามกับเราเตอร์ คำขอ เป็นอาร์เรย์ของสตริงแรกที่เป็นคำสั่งและอื่น ๆ เป็นพารามิเตอร์ หาก getAllafterQuery เป็น จริง แล้ว Trosapiresult.getall จะถูกดำเนินการหลังจากส่งแบบสอบถาม
หากคุณไม่จำเป็นต้องได้รับผลลัพธ์ใด ๆ จากแบบสอบถามของคุณให้ใช้วิธีนี้ มันเรียกใช้ฟังก์ชัน การสืบค้น และปลดปล่อยวัตถุที่ส่งคืน
ด้วยคุณสมบัตินี้คุณสามารถตั้งค่าการหมดเวลาสำหรับการดำเนินงานเครือข่าย (เป็นมิลลิวินาที)
คุณสมบัติแบบอ่านอย่างเดียวนี้มีคำอธิบายข้อความของข้อผิดพลาดล่าสุดเกิดขึ้น
ตัดการเชื่อมต่อจากเราเตอร์
คลาสนี้ให้ความสามารถในการทำงานกับข้อมูลที่ส่งคืนจากการสืบค้น การดำเนินการแต่ละคำสั่งคือ "แยก" ในวัตถุ trosapiresult ดังนั้นคุณสามารถทำคำขอแบบขนานได้โดยเรียก trosapiclient.query และรับวัตถุ trosapiresult หลายรายการ
ส่งคืนค่าของพารามิเตอร์ ชื่อ ( คำ ในแง่ของ API) ในประโยคปัจจุบัน วิธีที่ต้องการในการรับผลลัพธ์คือ: apiresult ['parmname'] แทน apiresult.valueByName ('parmname') คุณสามารถใช้ชื่อพารามิเตอร์ทั้งที่มีและไม่มีชั้นนำ '=' อักขระ ( apiresult ['ที่อยู่'] และ apiresult ['= address'] ส่งคืนผลลัพธ์เดียวกัน)
ส่งคืนประโยคปัจจุบันของผลลัพธ์การสืบค้น (ประเภทคือ trosapisentence)
รับหนึ่งประโยคจากเราเตอร์ หากพารามิเตอร์ รอ เป็น จริง ฟังก์ชั่นจะรอจนกว่าจะได้รับประโยค หาก การรอ เป็น เท็จ และไม่ได้รับประโยคในตอนนี้ฟังก์ชั่นจะส่งกลับ เท็จ สิ่งนี้มีประโยชน์เมื่อดำเนินการคำสั่งที่ไม่มีที่สิ้นสุด (เช่น 'ฟัง') ใน GUI เมื่อคุณต้องการประมวลผลการกระทำของผู้ใช้รายอื่น: คุณควรเรียก getone ด้วย wait = false เป็นระยะและในกรณีของผลลัพธ์เชิงลบเพียงทำอย่างอื่น
รับประโยคทั้งหมดไม่เกิน '! เสร็จแล้ว' จากนั้นส่งคืน จริง (หรือ เท็จ ในกรณีที่หมดเวลา)
ส่งคืนจำนวนประโยคที่ได้รับหลังจากโทร GetAll
ส่งคืน จริง หากมีประโยคเพิ่มเติมในผลลัพธ์การสืบค้น
ส่งคืน จริง ถ้ามีกับดักในระหว่าง 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 ตั้ง ค่า ให้เป็น เท็จ จากนั้นเราทำการสืบค้นและเปิดใช้งานตัวจับเวลา:
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 Routeros API Delphi ไคลเอ็นต์