Programmierung > Delphi/Lazarus > FRITZ!Box

Wie kann man Anfragen finden?

Wenn man sich das Webinterface einer FRITZ!Box ansieht, so sieht man, dass die Links LUA-Scripte aufrufen. Diese Scripte bauen die gewünschten Seiten auf. Dazu rufen sie entsprechende Daten ab bzw. ändern oder löschen diese auch. Das Script für die Anmeldung heißt zum Beispiel login_sid.lua. Will man einzelne oder auch mehrere Daten ermitteln kann man das Script query.lua verwenden. Diesem Script übergibt man einen Variablennamen und eine Anfrageadresse (da ich den Fachausdruck nicht kenne, nenne ich es mal so. Vielleicht weiß jemand mehr und kann es mir schreiben?). Eine HTTP-Anfrage sieht zum Beispiel so aus:

   
  GET /query.lua?sid=de49a0e0b1b48282&Boxzeit=box:status/localtime HTTP/1.1
  Host: fritz.box:80
  Accept: text/html, text/xml
  Connection: Close
   
        

Die Antwort sieht zum Beispiel so aus:

   
  HTTP/1.1 200 OK
  Connection: close
  Content-Type: application/json; charset=utf-8;
  Expires: -1

  {
   "Boxzeit": "10:20:30 29.03.2014""
  }
          

Damit hat man die Uhrzeit und das Datum der Fritzbox zum Zeitpunkt der Anfrage.

Wie geht es nun?

Eine Möglichkeit ist es, sich durch das Internet oder spezielle Foren zu wühlen. Am einfachsten ist es wohl sich den Quelltext der Seiten des Webinterfaces ansehen. Dies geschieht über einen Rechtsklick auf die Seite und die Auswahl von "Seitenquelltext anzeigen".

Im Seitenquelltext sucht man nach QUERIES und MQUERIES. In diesem Beispiel ist es die Anfrage für die eingestellten Rufsperren:

Die Anrufsperren können dann mit dieser Anfrage ermittelt werden:

   
  GET /query.lua?sid=de49a0e0b1b48282&Sperren=
                    telcfg:settings/CallerIDActions/list(CallerID,Action) HTTP/1.1
  Host: fritz.box:80
  Accept: text/html, text/xml
  Connection: Close
   
          

Die erste Zeile wurde wegen der Darstellung umgebrochen. Sie enthält den Namen des Scriptes query.lua, den Namen für das Antwortarray sowie die ermittelte Abfrage. Der Name für das Antwortarray kann frei gewählt werden. Die Abfrage muss genauso wie im Seitenquelltext geschrieben werden da die Abfrage sonst nicht funktioniert.

Die Antwort kann dann so aussehen:

   
  HTTP/1.1 200 OK
  Connection: close
  Content-Type: application/json; charset=utf-8;
  Expires: -1

  {
    "Sperren" : [
      {
        "CallerID" : "03********",
        "Action" : "1"
      },
      ...
      {
        "CallerID" : "08*******",
        "Action" : "1"
      }
    ]
  }
   
          

Nun muss das JSON-Dokument ausgewertet werden.